2016-02-01 31 views
2

我想澄清MVC5 Razor Views的一件事。MVC5提交後在文本框中丟失的值

有人告訴我,我不必在剃刀視圖中使用HTML助手(@ Html.EditorFor,@ Html.TextBoxFor),它仍然可以工作。

控制器代碼

[HttpPost] 
     public ActionResult Create(Models.TestObj obj) 
     { 
      ViewBag.TestStr = string.Format("You typed: {0} {1}", obj.FirstName, obj.LastName); 
      return View(obj); 
     } 

Razor視圖

@using (Html.BeginForm()) 
{ 

     <div> 
      @Html.EditorFor(model => model.FirstName, new { htmlAttributes = new { @class = "form-control", style = "width: 120px;" } })  
      <input class="form-control text-box single-line" id="LastName" name="LastName" style="width: 120px;" type="text">  
      <input type="submit" name="submit" value="Filter"/> 
     </div> 


    @ViewBag.TestStr 
} 

但是當我真正喜歡上面的測試中,「姓氏」文本框中鍵入的值不會被保留。我可以在我的控制器中捕獲兩個文本框的值。但回發之後,失去了「姓氏」文本框中的值。通過使用HTMLHelper創建的文本框不會丟失值。

我做錯了什麼或者應該是這樣嗎?如果我想保留提交的值,是否必須在MVC5的RazorView中使用HtmlHelpers?

回答

0

您沒有將第二個輸入綁定到LastName的值,只需設置其name屬性即可。如果你檢查你生成的html,你會注意到第一個有value屬性,而第二個沒有。

您需要使用EditorFor()(或TextBoxFor())爲你爲它產生正確的value屬性(以及其他屬性data-val-*需要使用客戶端驗證)的FirstName

附註:您還可以使用

<input name="LastName" ..... value="@Model.LastName"` /> 

但是這不會顧及ModelState

+0

如何在StackOverflow中將我的代碼格式化爲代碼片段?或者它是自動完成的? – TTCG

+1

您需要使用HtmlHelper。不認真,請參閱[如何使用Markdown或HTML格式化我的帖子](http://stackoverflow.com/help/formatting) –

1

什麼是「回傳」?這聽起來像是你試圖從WebForms的角度來考慮這個問題,在這種情況下,服務器端控件在幕後做了很多管道工作。

簡而言之,在您的視圖中沒有代碼實際上將該值置於input中。當使用HTML助手時,雖然生成的客戶端標記是相同的(因此,到下一個控制器動作的帖子是相同的),但有一點不同的是,HTML助手將控件綁定到模型提供給視圖。

HTML本身不會那樣做。但是,您可以手動執行此操作:

<input value="@Model.LastName" class="form-control text-box single-line" id="LastName" name="LastName" style="width: 120px;" type="text">  
     ^--- right here