2011-06-15 47 views
2

我有一個簡單的電子郵件捕獲表單作爲我的主頁的一部分,但是當我返回部分視圖時,表單編輯器的模型值沒有得到更新: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"; 
} 

<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(); 
     } 

這將返回模型誤差如預期,當模型狀態是有效的返回消息,但在響應電子郵件文本框的值並沒有更新

的反應形式螢火蟲當控制器發佈電子郵件[email protected]

<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="[email protected]" /> 
</span> 
<input type="submit" value="Submit" /> 
<div id="message"> 

    You e-mail has been added to our database - Thank you 
</div> 

<br/> 

我試圖創建一個新的模型,並通過在,我試過ModelState.Clear(),我可以用littl解決問題e jquery

但是,這看起來有點冒險,我想了解發生了什麼。

回答

9

在將電子郵件字段設置爲空字符串並且在您返回PartialView之前添加一個ModelState.Clear()應該可以做到這一點。你也可以試試ModelState.Remove(「Email」)。

請參閱this blog post瞭解更多關於內置助手爲什麼會這樣操作的信息。

+0

偉大的工作,但從你提到的職位來看,我應該使用Post-redirect-get模式,而不是對嗎? – Axe 2011-06-16 09:48:28

+0

如果你的目標是簡單地顯示一條確認消息,說明一條記錄已保存到數據庫,那麼是的。 – gram 2011-06-16 12:46:10

+0

@gram謝謝。究竟是什麼阻止了AJAX刷新我正在做的工作 – 2013-07-18 10:14:24