如何解决asp.net MVC3部分视图结果未更新EditorFor值
|| 我的主页中有一个简单的电子邮件捕获表单,但是当我返回部分视图时,表单的Editor的模型值不会得到更新: 该模型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/>
控制器
[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
但这似乎有点不客气,我想了解发生了什么。
解决方法
在将Email字段设置为空字符串之后并在返回PartialView之前添加ModelState.Clear()应该可以解决问题。您也可以尝试ModelState.Remove(\“ Email \”)。
请参阅此博客文章,以获取有关内置助手为何如此行为的更多信息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。