MVC表单DataType电子邮件空值

时间:2013-05-29 10:43:04

标签: asp.net-mvc c#-4.0 model-view-controller

我有一个MVC Ajax表单,其中文本框数据由表单模型类绑定。 在本课程中,我有以下几个领域:

    [Required(ErrorMessage = "First name must be filled")]
    public string FirstName { get; set; }

    [Required(AllowEmptyStrings = false,ErrorMessage = "Last Name must be filled")]
    public string LastName { get; set; }

    [DataType(DataType.EmailAddress)]
    [Required(AllowEmptyStrings = false, ErrorMessage = "Email must be filled")]
    public string Email { get; set; }

所有三个字段都与@Html.EditorFor(p=>p.FirstName/LastName/Email)绑定 - 所以这应该很简单。

一切正常,但在发布表单时,电子邮件字段始终为空。 我试图用<input type="email"(...)替换它,它也是null。

因此,结论是当表单成员具有type="email"时,该值为空。

有谁知道为什么,更重要的是:如何解决? (顺便说一句,这是asp.mvc4)

编辑:这是我的观点:

<div id="result"></div>
                @using (Ajax.BeginForm("FormTest", new AjaxOptions() {HttpMethod = "POST", InsertionMode = InsertionMode.Replace, UpdateTargetId = "result"}))
                {
                    {
                        Html.EnableClientValidation(true);
                    }
                    @Html.ValidationSummary(false)


                    @Html.LabelFor(p => p.EventForm.FirstName)
                    @Html.EditorFor(p => p.EventForm.FirstName)
                    @Html.LabelFor(p => p.EventForm.LastName)
                    @Html.EditorFor(p => p.EventForm.LastName)
                    @Html.LabelFor(p => p.EventForm.PhoneNumber)
                    @Html.EditorFor(p => p.EventForm.PhoneNumber)
                    @Html.LabelFor(p => p.EventForm.Email)
                    @Html.EditorFor(p => p.EventForm.Email)



                    @Html.LabelFor(p => p.EventForm.CompanyName)
                    @Html.EditorFor(p => p.EventForm.CompanyName)
                    @Html.LabelFor(p => p.EventForm.Adress)
                    @Html.EditorFor(p => p.EventForm.Adress)
                    @Html.LabelFor(p => p.EventForm.Zip)
                    @Html.EditorFor(p => p.EventForm.Zip)
                    @Html.LabelFor(p => p.EventForm.PostalCity)
                    @Html.EditorFor(p => p.EventForm.PostalCity)
                    @Html.LabelFor(p => p.EventForm.Country)
                    @Html.EditorFor(p => p.EventForm.Country)
                    @Html.LabelFor(p => p.EventForm.Comment)
                    @Html.EditorFor(p => p.EventForm.Comment)
                }

我的控制器操作:

        [HttpPost]
        public PartialViewResult Index(EventViewModel form)
        {
            StoreEventRegistration(form.EventForm);

            return PartialView("PagePartial/FormSubmit", form.EventForm);
        }

正如您可能理解的那样,我还没有添加我的整个模型,但其余的字段的创建方式与引用的相同。

1 个答案:

答案 0 :(得分:0)

您是否在视图中设置了表单,如下所示:

using (Ajax.BeginForm(...))
{

}   

如果是这样,请确保包含jquery不显眼的ajax min文件,否则表单将在使用某些浏览器时回发给控制器(我想我上周用IE7 / 8打了这个问题 - 添加此文件修复了它)。

<script src="@Url.Content("~/<your-path>/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>

更新:

确保在控制器或web.config级别设置了以下内容:

ClientValidationEnbled=true
UnobstrusiveJavaScriptEnabled=true

我的理解是,为了让所有活动部件都能工作,你必须包含所有这些js文件:

<script src="@Url.Content("~/<your-path>/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/<your-path>/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/<your-path>/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>