我想定义一个显示标签和复选框列表的视图,用户可以更改复选框,然后发回。我在回传字典时遇到问题。也就是说,post方法的字典参数为null。
以下是 GET 和 POST 操作的操作方法:
public ActionResult MasterEdit(int id)
{
Dictionary<string, bool> kv = new Dictionary<string, bool>()
{
{"A", true},
{"B", false}
};
return View(kv);
}
[HttpPost]
public ActionResult MasterEdit(Dictionary<string, bool> kv)
{
return RedirectToAction("MasterEdit", new { id = 1 });
}
下面是视图
@model System.Collections.Generic.Dictionary<string, bool>
@{
ViewBag.Title = "Edit";
}
<h2>
MasterEdit</h2>
@using (Html.BeginForm())
{
<table>
@foreach(var dic in Model)
{
<tr>
@dic.Key <input type="checkbox" name="kv" value="@dic.Value" />
</tr>
}
</table>
<input type="submit" value="Save" />
}
任何想法将不胜感激!
不要为此使用字典。它们不能很好地处理模型绑定。可能是皮塔饼。
视图模型会更合适:
public class MyViewModel
{
public string Id { get; set; }
public bool Checked { get; set; }
}
然后是一个控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
var model = new[]
{
new MyViewModel { Id = "A", Checked = true },
new MyViewModel { Id = "B", Checked = false },
};
return View(model);
}
[HttpPost]
public ActionResult Index(IEnumerable<MyViewModel> model)
{
return View(model);
}
}
然后是相应的视图(~/Views/Home/Index.cshtml
):
@model IEnumerable<MyViewModel>
@using (Html.BeginForm())
{
<table>
<thead>
<tr>
<th></th>
</tr>
</thead>
<tbody>
@Html.EditorForModel()
</tbody>
</table>
<input type="submit" value="Save" />
}
最后是相应的编辑器模板(~/Views/Home/EditorTemplates/MyViewModel.cshtml
):
@model MyViewModel
<tr>
<td>
@Html.HiddenFor(x => x.Id)
@Html.CheckBoxFor(x => x.Checked)
@Html.DisplayFor(x => x.Id)
</td>
</tr>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)