【发布时间】:2014-06-12 08:17:50
【问题描述】:
我知道有许多 CheckBoxListFor 辅助方法的自定义实现来填补 MVC 框架中缺少的功能。但我还没有准备好使用它们。我有兴趣仅使用 MVC 4 或 5 提供的功能创建复选框列表。所以,我创建了这个模型类:
使用 System.Collections.Generic; 使用 System.ComponentModel.DataAnnotations; 命名空间 MvcApplication1.Models { 公共类 FruitViewModel { 公共 int[] SelectedFruits { 获取;放; } 公共 IList 水果 { 得到 { 返回新列表{ 新水果{Id=1, Name="Apple", Selected = false}, 新水果{Id=2, Name="Banana", Selected = false}, 新水果{Id=3, Name="Cherry", Selected = false}, 新水果{Id=4, Name="Durian", Selected = false}, 新水果{Id=5, Name="Elderweiss Grape", Selected = false} }; } } } 公共课水果 { 公共 int ID { 获取;放; } 公共字符串名称 { 获取;放; } 公共布尔选择{得到;放; } } }这里是控制器类:
使用 MvcApplication1.Models; 使用 System.Web.Mvc; 命名空间 MvcApplication1.Controllers { 公共类 FruitController : 控制器 { 公共行动结果索引() { FruitViewModel 模型 = 新 FruitViewModel(); 返回视图(模型); } [HttpPost] 公共 ActionResult 索引(FruitViewModel 模型) { 如果(模型状态。IsValid) { } 返回视图(模型); } } }这是剃刀视图:
@model MvcApplication1.Models.FruitViewModel
@{
ViewBag.Title = "Index";
}
<h2>Select your favorite fruits</h2>
@using (Html.BeginForm("Index", "Fruit"))
{
<p>Using Html helper method:</p>
for (int i = 0; i < Model.Fruits.Count; i++)
{
@Html.CheckBoxFor(m => m.Fruits[i].Selected) @Model.Fruits[i].Name<br />
}
<p>Plain html without html helper</p>
for (int i = 0; i < Model.Fruits.Count; i++)
{
<input type="checkbox" name="SelectedFruits" value="@Model.Fruits[i].Id" checked="@Model.Fruits[i].Selected" />
@Model.Fruits[i].Name<br />
}
<input type="submit" name="submit" value="Submit" />
}
以下是我遇到的问题:
纯 HTML 版本将使用我选择的水果的 ID 正确填充 SelectedFruits 集合,正如您从屏幕截图中看到的那样。但是当页面在回发后刷新时,选中的复选框状态会重置为未选中。
使用 Html 帮助程序 CheckBoxFor 的版本不会使用我选择的水果 ID 填充我的 SelectedFruits 集合,尽管它似乎在回发完成后保持复选框状态为选中状态。
所以,无论哪种情况,都有一个大问题。
设置复选框列表的正确方法是什么,以便我可以正确填充 SelectedFruits 集合并在表单发布完成后维护复选框的状态(当我在页面上添加其他内容并且验证失败时很重要) .
【问题讨论】:
-
感谢编辑。请告诉我如何在 SO 帖子中正确格式化剃刀视图。刚才做了30分钟,还是没做好,只好放弃了。非常感谢!
标签: c# asp.net-mvc asp.net-mvc-4 asp.net-mvc-5