【问题标题】:MVC equilvelant of repeater with multiple form elements and checkbox to select具有多个表单元素和复选框的中继器的 MVC equilvelant
【发布时间】:2011-07-01 09:14:26
【问题描述】:

我需要复制您使用包含复选框、文本框和 MVC 应用程序中偶尔出现的下拉列表的 asp 中继器获得的功能。 Om 传统的网络表单,您会收到一个回发事件,并且很容易获得与复选框 (id) 关联的所有控件及其值。

对于如何在帖子中恢复选中复选框的项目的值,任何人都有任何好的建议。我能够在 FormCollection 中获取一些数组(甚至是强类型视图),但我无法找到一种有效链接值的好方法。

所有行都有一个复选框和一个文本框,有些行还有一个下拉列表

进一步解释... 第 1 行有一个复选框和一个文本框 第 2 行有一个复选框、一个文本框和一个下拉列表。

如果用户选择第 1 行和第 2 行,我需要获取所有表单元素的值(用于某些计算)。另外,我还没有想出处理验证错误的好方法。

非常感谢任何建议。

【问题讨论】:

    标签: model-view-controller repeater checkboxlist


    【解决方案1】:

    最简单的做法是迭代您将为其设置转发器的集合。使用 Razor 语法:

    @using (Html.BeginForm()) {
    <table>
    @for (var i = 0; i < Models.Items.Count; i++) {
    <tr>
    <td>
      @Html.CheckBoxFor(x => Model.Items[i].SomeBool)
    </td>
    <td>
      @Html.TextBoxFor(x => Model.Items[i].SomeString)
    </td>
    </tr>
    }
    </table>
    <button type="submit">Go</button>
    }
    

    然后是控制器方法:

    [HttpPost]
    public ActionResult Index(MyViewModel viewModel) {
     // view model will be bound to values in form
    }
    

    假设视图中的模型是 MyViewModel 类型。了解其工作原理后,您可以查看ASP.NET MVC grid frameworks

    【讨论】:

    • 问题不在于 html 的创建,而在于提取所选值并确保仅使用与所选复选框关联的元素。当表单发布时,所有具有相同 name 属性的元素都作为数组发送到服务器。可以只遍历复选框数组,对于每个为真的元素,在文本框数组和下拉列表数组中找到相应的元素。问题是每条记录上都没有 ddl,所以数组元素不同
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    相关资源
    最近更新 更多