asp.net-mvc-3 - asp.net MVC3 部分 View 结果不更新 EditorFor 值

标签 asp.net-mvc-3 jquery partial-views

我有一个简单的电子邮件捕获表单作为我的主页的一部分,但是当我返回部分 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/

相关文章:

asp.net-mvc-3 - 使用 Specflow 在基于 .NET MVC 3 的项目上进行外部开发

jquery - Kendo UI 验证器错误消息未正确定位

jquery - 如何在 Bootstrap 模态弹出窗口中加载部分 View 并将参数传递给 actionresult 以在模态窗口加载时加载网格?

asp.net-mvc - MVC中局部 View 和用户控件的区别

c# - 是否在 ASP.NET MVC 局部 View (ASCX) 中使用 JavaScript 代码?

asp.net-mvc-3 - 如何在MVC应用程序中使用POCO

c# - MVC 3 不在区域下寻找 View

asp.net-mvc-3 - jQuery 移动/MVC : Getting the browser URL to change with RedirectToAction

javascript - ng-show 与 ng-hide 的性能对比

c# - ASP.NET 从母版页调用 Controller 方法?