asp.net MVC3局部视图结果没有更新EditorFor值

我有一个简单的电子邮件捕获表单作为我的主页的一部分,但是当我返回局部视图时,表单的编辑器的模型值没有得到更新:

该模型

public class Contact { [Key] public int Id { get; set; } [Required] public string Email { get; set; } [NotMapped] public string Message { get; set; } } 

观点

 @model TestApp.Models.Contact @{ ViewBag.Title = "Home Page"; }     $(function () { // ajax form post $("#EmailForm").ajaxForm(function (result) { $("#EmailForm").html(result); // post results }); });  @using (@Html.BeginForm("SaveEmail", "Home", FormMethod.Post, new { id = "EmailForm" })) { @Html.Partial("SaveEmail", Model); } 

偏袒

 @model TestApp.Models.Contact  @Html.LabelFor(m => m.Email) :   @Html.EditorFor(m => m.Email)   
@Html.ValidationMessageFor(m => m.Email) @Html.DisplayFor(m => m.Message)

控制器

  [HttpPost] public PartialViewResult SaveEmail(Contact contact) { if (ModelState.IsValid) { //TODO: save e-mail to database contact.Message = "You e-mail has been added to our database - Thank y ou"; contact.Email = ""; return PartialView(contact); } return PartialView(); } 

这会按预期返回模型错误,在模型状态有效时返回消息,但响应中的电子邮件文本框值不会更新

发送电子邮件a@b.com时,回复forms为firebug

   :      
You e-mail has been added to our database - Thank you

我已经尝试创建一个新模型并将其传递给我,我已经尝试了ModelState.Clear(),我可以通过一点点jquery解决问题

  $("#Email").val(''); // clear the email address 

但这似乎有点hacky,我想了解发生了什么。

在将电子邮件字段设置为空字符串之后添加ModelState.Clear()并在返回PartialView之前添加一个ModelState.Clear()应该可以解决问题。 您也可以尝试ModelState.Remove(“Email”)。

有关内置帮助程序以这种方式运行的原因的详细信息,请参阅此博客文章 。