Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 asp.net MVC3局部视图结果未更新EditorFor值_Asp.net Mvc 3_Jquery_Partial Views - Fatal编程技术网

Asp.net mvc 3 asp.net MVC3局部视图结果未更新EditorFor值

Asp.net mvc 3 asp.net MVC3局部视图结果未更新EditorFor值,asp.net-mvc-3,jquery,partial-views,Asp.net Mvc 3,Jquery,Partial Views,我有一个简单的电子邮件捕获表单作为主页的一部分,但是当我返回部分视图时,表单编辑器的模型值没有得到更新: 模型 public class Contact { [Key] public int Id { get; set; } [Required] public string Email { get; set; } [NotMapped] public string Message { get

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

模型

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);
    }
这将按预期返回模型错误,当模型状态有效时返回消息,但响应中的电子邮件文本框值未更新

发布电子邮件时的响应表单firebuga@b.com

<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/>
但这似乎有点不对劲,我想知道到底发生了什么

在将Email字段设置为空字符串之后,在返回PartialView之前,添加ModelState.Clear()应该可以做到这一点。您也可以尝试ModelState.Remove(“电子邮件”)


有关内置帮助程序为何会这样做的更多信息,请参阅。

这很好,但从您提到的帖子来看,我应该使用post redirect get模式,对吗?如果您的目标只是显示一条确认消息,说明记录已保存到数据库中,那么可以。@gram谢谢。确切地说,是什么阻止了我正在进行的AJAX刷新,尽管我的刷新是通过GET请求进行的,但是那篇文章讨论了post,所以我不明白为什么我需要重置模型状态。
  [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();
        }
<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/>
 $("#Email").val(''); // clear the email address