2012-09-07 39 views
31

我正在使用帶有Razor的ASP.NET MVC 3,下面是我的視圖代碼中的示例。Html.DisplayFor未在ASP.NET MVC 3中向控制器發佈值

用戶應該能夠編輯除「EmailAddress」字段之外的所有詳細信息。對於那個領域,我只用了Html.DisplayFor(m => m.EmailAddress)

但是,當此表單發佈後,除EmailAddress之外的所有模型屬性都將填充。

發佈時如何在模型中取回電子郵件?我應該使用DisplayFor以外的幫手嗎?

@using (Html.BeginForm()) { 
    @Html.ValidationSummary(true, "Account update was unsuccessful. Please correct any errors and try again.") 
    <div> 
     <fieldset> 
      <legend>Update Account Information</legend> 
      <div class="editor-label"> 
       @Html.LabelFor(m => m.EmailAddress) 
      </div> 
      <div class="editor-field"> 
       @Html.DisplayFor(m => m.EmailAddress) 
       @*@Html.ValidationMessageFor(m => m.EmailAddress)*@ 
      </div>   
      <div class="editor-label"> 
       @Html.LabelFor(m => m.FirstName) 
      </div> 
      <div class="editor-field"> 
       @Html.TextBoxFor(m => m.FirstName) 
       @Html.ValidationMessageFor(m => m.FirstName) 
      </div> 
      <div class="editor-label"> 
       @Html.LabelFor(m => m.LastName) 
      </div> 
      <div class="editor-field"> 
      @Html.TextBoxFor(m => m.LastName) 
       @Html.ValidationMessageFor(m => m.LastName) 
      </div> 
      <p> 
       <input type="submit" value="Update" />     
      </p> 
     </fieldset> 
    </div> 
} 

請在此告訴我。

回答

44

你需要添加一個

@Html.HiddenFor(m => m.EmailAddress) 

DisplayFor不會在POST發送任何東西,也不會產生輸入...

順便說一句,一個

@Html.HiddenFor(m => m.Id) // or anything which is the model key

將是有用的

+1

好所以在我的情況下,我需要有' DisplayFor'和'HiddenFor'吧? DisplayFor將向用戶顯示值,並且HiddenFor將值返回給控制器。 – Yasser

+6

發現這個http://stackoverflow.com/a/11057087/1182982非常翔實! – Yasser