【问题标题】:Binding a checkbox to a model when POSTing a formPOST 表单时将复选框绑定到模型
【发布时间】:2012-04-11 00:43:09
【问题描述】:

这是我的简单课程:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using XXX.Domain;

namespace XXX.WebUI.Models
{
    public class AccountRegisterModel
    {
        ..snip..

        [Required(ErrorMessage = "You must agree to our terms of use.")]
        public bool AcceptedTerms { get; set; }

        ..snip..
    }
}

我的看法:

<div class="terms">
    <input type="checkbox" name="AcceptedTerms" value="AcceptedTerms"  />
    <img class="sim" src="@Url.Content("~/Public/images/unchecked.gif")" alt="accept the terms" />
    <p>I accept the <span class="legalize">Terms of Service &amp; Privacy Policy</span> and wish to continue</p>
</div>

视图以未选中的复选框开始,并使用一些 Javascript 代码我使用图像创建一个时髦的复选框,并在幕后更新该复选框,以便回发正确的值。

$('.terms input[type="checkbox"]').prop("checked", true);

出于调试目的,我在“隐藏”actual 复选框中添加了display:block 规则,以查看当我单击图像时检查是否真的被勾选,我可以确认这是案例。

此外,使用 Firebug,当我单击图像并勾选复选框时显示的 HTML 如下:

<input type="checkbox" name="AcceptedTerms" value="AcceptedTerms">

当表单发布时,AcceptedTerms 的值保持为 false,就好像该值没有被发布回我的服务器一样。也许 HTML 缺少我不知道的属性。

有什么想法或建议吗?

【问题讨论】:

  • 什么形式?你怎么发? jQuery $.ajax 或类似的东西?
  • 我没有发布 HTML 表单,因为它不相关。 POSTS 数据很简单,没有 $.ajax 之类的东西。 :) 如果您需要看,请告诉我,但这并没有什么特别之处。

标签: c# jquery html asp.net-mvc-3 checkbox


【解决方案1】:
<input type="checkbox" name="AcceptedTerms" value="AcceptedTerms"  />

应该改为

<input type="checkbox" name="AcceptedTerms" value="true"  />

value 必须是 true 而不是 AcceptedTerms。

如果你使用@Html.CheckBoxFor(x => x.AcceptedTerms)

您将看到该值设置为 true。

【讨论】:

    【解决方案2】:

    要保留您需要将复选框绑定到视图模型的值。我会这样:

    @Html.CheckBoxFor(x => x.AcceptedTerms)
    

    当您的表单发布时,它应该具有复选框的值,即。是否已检查 (true) 或未检查 (false)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 2013-03-06
      • 2014-05-15
      • 1970-01-01
      • 1970-01-01
      • 2018-07-24
      • 2018-06-21
      相关资源
      最近更新 更多