【问题标题】:Get value of checkboxes in MVC3获取 MVC3 中复选框的值
【发布时间】:2012-08-07 14:59:28
【问题描述】:

我在页面上有一些 html 复选框,我需要验证它们是否已在页面的回发事件中检查。

这些复选框的数据不存储在数据库中,只需在使用前检查它们即可进入下一页。

我如何验证它们是否已被检查?我在 Request.Form.AllKeys 集合中没有看到它们

<input id='terms_eligibility' type='checkbox'   />
<input id='terms_accurate' type='checkbox' />
<input id='terms_score_release' type='checkbox' />

编辑 这就是我最终做的事情

查看

 @Html.CheckBox("terms_eligibility")

控制器

string eligibility = Request.Form.GetValues("terms_eligibility")[0];

【问题讨论】:

  • 您没有指定任何value 并且“复选框”不会显示在Form 集合中,如果它没有被选中...
  • @RonaldMcDonald 你为什么没有这个的视图模型?

标签: c# asp.net-mvc asp.net-mvc-3 asp.net-mvc-partialview


【解决方案1】:

使用 MVC,您应该使用视图模型来跟踪复选框状态,例如

public class MyViewModel
{
    public bool TermsEligibility { get; set; }
    public bool TermsAccurate { get; set; } 
    public bool TermsScoreRelease { get; set; }
}

让 MVC 将属性映射到控件:

@model MyViewModel

@Html.BeginForm("MyAction", "MyController", FormMethod.Post, new { id = "myFormId" })
{
    @Html.CheckBoxFor(m => m.TermsElibility)
    @Html.CheckBoxFor(m => m.TermsAccurate)
    @Html.CheckBoxFor(m => m.TermsScoreRelease)   
    <input id="saveBtn" type="submit" value="Save" />
}

然后,您可以在发布结果时访问模型中的值:

[HttpPost]
public ActionResult MyAction(MyViewModel model)
{
    if (model.TermsEligibility)
    {
        ....
    }
}

【讨论】:

  • 赞成使用 MVC 的用途。
【解决方案2】:

如果 HTML 复选框未选中,则其值不会发送回网络服务器。

MVC 通过为每个复选框添加一个&lt;input type="hidden" /&gt; 来解决此问题,以确保始终发送一个值,因此它可以检测复选框是否被选中。

要使用这些隐藏输入,您必须使用 Html.CheckBoxHtml.CheckBoxFor 辅助方法。

无论如何,您发布的 HTML 没有任何 name="" 属性。 HTML 输入必须具有名称属性。他们不使用id 属性作为表单字段键。

【讨论】:

  • 添加隐藏值会导致其他问题。这里的主要问题是缺少名称属性。
  • 还有什么问题?添加隐藏字段是 ASP.NET MVC 的设计使然,它是确保字段存在的好方法,即使其值未发送也是如此。 Ruby on Rails 和 CakePHP 都做同样的事情。
  • 字符串资格 = Request.Form.GetValues("terms_eligibility")[0];
猜你喜欢
  • 2012-02-19
  • 2012-04-12
  • 1970-01-01
  • 1970-01-01
  • 2012-11-01
  • 2012-07-20
  • 1970-01-01
  • 2011-10-07
相关资源
最近更新 更多