2012-09-07 14 views
31

Estoy usando ASP.NET MVC 3 con Razor, a continuación se muestra un ejemplo de mi código de vista.Html.DisplayPara no publicar valores en el controlador en ASP.NET MVC 3

El usuario debería poder editar todos sus detalles, excepto el campo "EmailAddress". Para ese campo solo he usado Html.DisplayFor(m => m.EmailAddress).

Pero cuando se publica este formulario, se rellenan todas las propiedades del modelo excepto el EmailAddress.

¿Cómo devuelvo el correo electrónico al modelo cuando publico? ¿Debo haber usado algún tipo de ayuda que no sea 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> 
} 

Por favor, avísenme sobre esto.

Respuesta

44

tendrá que añadir un

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

DisplayFor no enviará nada en el puesto, no creará una entrada ...

Por cierto, un

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

sería muy útil

+1

bien así que en mi caso, yo tendría que tener tanto ' DisplayFor' y 'HiddenFor' ¿verdad? DisplayFor mostrará el valor al usuario, y HiddenFor publicará el valor nuevamente en el controlador. – Yasser

+6

encontró esto http://stackoverflow.com/a/11057087/1182982 muy informativo! – Yasser

Cuestiones relacionadas