c# - 如何从基于复选框的 View 传递对象?

标签 c# asp.net asp.net-mvc-3

我想知道是否可以根据复选框选择来传递对象。我自己解释一下:如果有一个选定的值,那实际上意味着我需要传递该选择代表的对象才能使用它。

我有这段代码:

<% foreach (var _client in ViewData["channels"] as List<DigiTV.Models.CANAL>) { %>
   <%= Html.CheckBox(_client.NOM_CANAL) %> <%= Html.Encode(_client.NOM_CANAL) %> <br />
<% } %>

如您所见,我有一个要传递给 Controller ​​的对象类型列表(List)

有人有什么建议吗?

谢谢

最佳答案

我强烈建议您使用 View 模型、强类型 View 和编辑器模板。

因此,一如既往地从定义一个 View 模型开始,它将包含您的 View 可能需要的所有必要数据:

public class CanalViewModel
{
    public string Name { get; set; }
    public bool Selected { get; set; }
}

然后是一个 Controller :

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new[]
        {
            new CanalViewModel { Name = "canal 1", Selected = false },
            new CanalViewModel { Name = "canal 2", Selected = true },
            new CanalViewModel { Name = "canal 3", Selected = false },
            new CanalViewModel { Name = "canal 4", Selected = false },
        };

        return View(model);
    }

    [HttpPost]
    public ActionResult Index(IEnumerable<CanalViewModel> model)
    {
        return View(model);
    }
}

接下来是 ~/Views/Home/Index.aspx View :

<%@ Page 
    Language="C#" 
    MasterPageFile="~/Views/Shared/Site.Master"
    Inherits="System.Web.Mvc.ViewPage<IEnumerable<AppName.Models.CanalViewModel>>" 
%>

<% using (Html.BeginForm()) { %>
    <%= Html.EditorForModel() %>
    <input type="submit" value="OK" />
<% } %>

最后,您需要一个运河编辑器模板,它将针对模型中的每个元素执行(~/Views/Home/EditorTemplates/CanalViewModel.ascx):

<%@ Control 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<AppName.Models.CanalViewModel>" 
%>

<div>
    <%= Html.HiddenFor(x => x.Name) %>
    <%= Html.CheckBoxFor(x => x.Selected) %>
    <%= Html.LabelFor(x => x.Selected, Model.Name) %>
</div>

现在,当您提交表单时,在 POST 操作中,您将获得所有运河的列表及其所选属性,具体取决于用户选择的复选框。

如您所见,我们不需要任何 ViewData,这将要求您在 View 中执行一些丑陋的转换,并且您不需要在 View 中编写任何 foreach 循环。一切都由框架按照既定的约定自动处理。

关于c# - 如何从基于复选框的 View 传递对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6401277/

相关文章:

c# - 如何使用 RadioButton 使其他 RadioButton 可见?

c# - 演示受限执行区域重要性的代码

C# 事件处理

c# - linq 查询从表中选择评论最多的前 10 个条目

c# - 在 ASP.NET 中检索 LAST_INSERT_ID 值时记录发布两次

asp.net-mvc-3 - Unity 为什么使用服务定位器?

c# - 您可以将 asp.net gridview 数据绑定(bind)到基类中的字段吗?

c# - jQuery 对话框和 Repeater 中的复选框问题

asp.net-mvc-3 - ASP.NET-MVC 3:本地化

asp.net-mvc-3 - 使用 aspx View 引擎创建 Orchard 模块