TextBoxFor错误地设置属性名称,而不是绑定模型

时间:2012-12-11 21:05:02

标签: c# html asp.net-mvc-3 post model-binding

在我的一个类型为ProfileModel的强类型视图中,我调用另一种类型的编辑器:

@model MVC3App.WebUI.Models.ProfileModel

<div class="contact-form">
    @Html.EditorFor(x => x.ContactModel)
</div>

我有这个简单的模型:

public class ContactModel
{
    [Required]
    [Display(Name = "Name:")]
    public string Name { get; set; }

    [Required]
    [Display(Name = "Email:")]
    public string Email { get; set; }

    [Required]
    [Display(Name = "Message:")]
    public string Message { get; set; }
}

这就是我在我的EditorTemplate视图中使用ContactModel显示文本框的内容:

@model MVC3App.WebUI.Models.ContactModel

@Html.TextBoxFor(model => model.Name, new { placeholder = "* Name" })

生成的HTML:

<input data-val="true" 
       data-val-required="The field Name: is required." 
       id="ContactModel_Name" 
       name="ContactModel.Name" 
       placeholder="* Name" type="text" value="">

当回发到服务器时,该值不会绑定到模型属性。

[HttpPost]
public ActionResult SendPatientContact(ContactModel model)
{
    if (ModelState.IsValid)
    {
        // model.Name is null. :S

        return RedirectToAction("ThankYou");
    }

    return RedirectToAction("ThankYou");
}

如果我手动将文本框的name设置为name="Name",则该值正确绑定到模型属性。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

在您的情况下,您不应使用@Html.EditorFor方法,而应使用@{Html.RenderPartial("_ContactPartialView", Model.ContactModel);}