首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何处理ASP.NETMVC表单中的复选框?

如何处理ASP.NETMVC表单中的复选框?
EN

Stack Overflow用户
提问于 2019-05-24 00:01:43
回答 2查看 0关注 0票数 0

警告:这个问题已经超过九年了!

您最好的选择是搜索更新的问题,或搜索下面的答案,寻找您的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)%>&nbsp;<%= 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 更新的。

但我没有为此设置对象; 这是否意味着这是唯一的方法?还有另一种方法吗?

EN

回答 2

Stack Overflow用户

发布于 2019-05-24 08:54:52

HtmlHelper添加一个隐藏的输入来通知控制器有关未经检查的状态。所以要有正确的检查状态:

bool bChecked = form[key].Contains("true");
票数 0
EN

Stack Overflow用户

发布于 2019-05-24 09:50:14

如果您想知道为什么他们将隐藏字段放入与复选框相同的名称,原因如下:

来自源代码MVCBetaSource \ MVC \ src \ MvcFutures \ Mvc \ ButtonsAndLinkExtensions.cs的评论

<input type="hidden".../>为复选框添加附加内容。这解决了未在请求中发送未选中复选框的情况。发送隐藏的输入可以在提交请求时知道页面上存在复选框。

我想在幕后他们需要知道这个用于绑定控制器动作方法上的参数。然后,我可以使用三态布尔值(绑定到可以为空的bool参数)。我没试过,但我希望他们做了什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100001200

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档