我有一个简单的电子邮件捕获表单作为我的主页的一部分,但是当我返回部分 View 时,表单编辑器的模型值没有更新:
模型
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";
}
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.form.js")" type="text/javascript"></script>
<script type="text/javascript" >
$(function () {
// ajax form post
$("#EmailForm").ajaxForm(function (result) {
$("#EmailForm").html(result); // post results
});
});
</script>
@using (@Html.BeginForm("SaveEmail", "Home", FormMethod.Post, new { id = "EmailForm" }))
{
@Html.Partial("SaveEmail", Model);
}
部分内容
@model TestApp.Models.Contact
<span class="editor-label">
@Html.LabelFor(m => m.Email) :
</span>
<span class="editor-field">
@Html.EditorFor(m => m.Email)
</span>
<input type="submit" value="Submit" />
<div id="message">
@Html.ValidationMessageFor(m => m.Email)
@Html.DisplayFor(m => m.Message)
</div>
<br/>
Controller
[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 时的响应表单 firebug
<span class="editor-label">
<label for="Email">Email</label> :
</span>
<span class="editor-field">
<input class="text-box single-line" id="Email" name="Email" type="text" value="a@b.com" />
</span>
<input type="submit" value="Submit" />
<div id="message">
You e-mail has been added to our database - Thank you
</div>
<br/>
我尝试过创建一个新模型并将其传入,我尝试过 ModelState.Clear(),我可以用一点 jquery 解决问题
$("#Email").val(''); // clear the email address
但这看起来有点老套,我想了解发生了什么。
最佳答案
在将电子邮件字段设置为空字符串之后、返回 PartialView 之前添加 ModelState.Clear() 应该可以解决问题。您也可以尝试 ModelState.Remove("Email")。
参见this blog post了解有关内置帮助程序为何如此行为的更多信息。
关于asp.net-mvc-3 - asp.net MVC3 部分 View 结果不更新 EditorFor 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6359029/