警告:这个问题已经超过九年了!
您最好的选择是搜索较新的问题,或者搜索下面的答案以查找您的特定 MVC 版本,因为这里的许多答案现在已经过时了。
如果您确实找到了适用于您的版本的答案,请确保该答案包含您正在使用的 MVC 版本。
(原来的问题从下面开始)
这对我来说似乎有点奇怪,但据我所知,这就是你的做法。
我有一组对象,我希望用户选择其中一个或多个。这对我说“带有复选框的表单”。我的对象没有任何“选择”的概念(它们是通过反序列化 wcf 调用形成的基本 POCO)。因此,我执行以下操作:
public class SampleObject{
public Guid Id {get;set;}
public string Name {get;set;}
}
在视图中:
<%
using (Html.BeginForm())
{
%>
<%foreach (var o in ViewData.Model) {%>
<%=Html.CheckBox(o.Id)%> <%= o.Name %>
<%}%>
<input type="submit" value="Submit" />
<%}%>
而且,在控制器中,这是我可以看到找出用户检查了哪些对象的唯一方法:
public ActionResult ThisLooksWeird(FormCollection result)
{
var winnars = from x in result.AllKeys
where result[x] != "false"
select x;
// yadda
}
首先它很奇怪,其次,对于用户检查的那些项目,FormCollection 将其值列为“真假”而不仅仅是真。
显然,我错过了一些东西。我认为这是基于这样的想法构建的,即在 html 表单中作用于集合中的对象是使用UpdateModel()
或通过 ModelBinder 更新的。
但是我的对象不是为此设置的;这是否意味着这是唯一的方法?还有另一种方法吗?