Asp.net mvc 3 两次发布Asp Net MVC 3的属性的模型复选框

Asp.net mvc 3 两次发布Asp Net MVC 3的属性的模型复选框,asp.net-mvc-3,c#-4.0,Asp.net Mvc 3,C# 4.0,所以我有一个局部的观点 <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<NewsletterUnsubscribe_MVC3v2.Models.IntegraRecord>" %> <% if (!String.IsNullOrEmpty(Model.ErrorMessage)) {%> <div class="input-validation-error

所以我有一个局部的观点

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<NewsletterUnsubscribe_MVC3v2.Models.IntegraRecord>" %>

<% if (!String.IsNullOrEmpty(Model.ErrorMessage))
   {%>
   <div class="input-validation-error">
    <%:Model.ErrorMessage %>
   </div>
<% }
   else
   {%>

<% using (Html.BeginForm())
{%>
    <%:Html.ValidationSummary(true)%>
    <fieldset>
        <legend>IntegraRecord</legend>
        <div class="editor-field">
                <%:Html.LabelFor(m => m.EmailAddress)%>: <strong><%:Model.EmailAddress%></strong>
        </div>
        <%:Html.HiddenFor(m=>m.EmailAddress) %>
        <div class="editor-field">
                Unsubscribe from Area mailings: <%:Html.CheckBoxFor(m => m.AreaUnsubscribe)%>
        </div>
        <div class="editor-field">
                Unsubscribe from Monthly newsletters: <%:Html.CheckBoxFor(m => m.MonthlyUnsubscribe)%>
        </div>
        <p>
            <input type="submit" value="Save" />
        </p>
    </fieldset>
<% }
   }%>
因此,TryUpdateModel返回true,但不填充任何字段

这将被发送到控制器

 [HttpPost]
        public ActionResult GetRecord(IntegraRecord model)
        {
            if (TryUpdateModel(model))
            {
                try
                {
                    BusinessLayer.UpdateEmailAddress(model);
                }
                catch (ArgumentException)
                {
                    return View("Error", ViewBag.Message = "Could Not Update Email Address.");
                }
            }
            return PartialView("GetRecord", model);
        }
非常感谢您的帮助


更新:下面是澄清(谢谢!)

我没有使用自定义模型活页夹,所以我想我也错过了一些其他约定

这是我的模型

public class IntegraRecord
    {
        private const string EmailRegex = @"[snip]";

        [Required(ErrorMessage = "Email Address is required")]
        [RegularExpression(EmailRegex, ErrorMessage = "This does not appear to be an email address")]
        public string EmailAddress;

        public bool AreaUnsubscribe;
        public bool MonthlyUnsubscribe;

        public string ErrorMessage;

        public IntegraRecord()
        {
        }

        public IntegraRecord(string email, bool area, bool monthly)
        {
            EmailAddress = email;
            AreaUnsubscribe = area;
            MonthlyUnsubscribe = monthly;
        }
    }


这就是MVC处理复选框的方式:(和许多其他地方) 问题出在服务器端(默认模型绑定器知道这一点,并且没有问题)。您正在使用自定义模型活页夹吗

public class IntegraRecord
    {
        private const string EmailRegex = @"[snip]";

        [Required(ErrorMessage = "Email Address is required")]
        [RegularExpression(EmailRegex, ErrorMessage = "This does not appear to be an email address")]
        public string EmailAddress;

        public bool AreaUnsubscribe;
        public bool MonthlyUnsubscribe;

        public string ErrorMessage;

        public IntegraRecord()
        {
        }

        public IntegraRecord(string email, bool area, bool monthly)
        {
            EmailAddress = email;
            AreaUnsubscribe = area;
            MonthlyUnsubscribe = monthly;
        }
    }