2011-12-30 10 views
8

que tiene este modelo:MVC 3 vista de edición para ciertos campos sólo

public class ExchangeRate 
{ 
    [Key] 
    public int ExchangeRateID { get; set; } 
    [Required] 
    [Display(Name = "Currency:")] 
    public string Currency { get; set; } 
    [Required] 
    public decimal Rate { get; set; } 
} 

El "Crear" vista está trabajando muy bien, pero cuando estoy en la vista de edición, lo único que quiere la propiedad de divisas que se mostrará y no editable ¿Cómo debería hacer esto? Si creo otro modelo de "solo lectura" para esta clase, omitiría la propiedad "Moneda" y no podría mostrarla.

@using (Html.BeginForm()) { 
@Html.ValidationSummary(true) 
<fieldset> 
    <legend>ExchangeRate</legend> 

    @Html.HiddenFor(model => model.ExchangeRateID) 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.Currency) 
    </div> 
    <div class="editor-field"> 
     @Html.DisplayFor(model => model.Currency) 
    </div> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.Rate) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.Rate) 
     @Html.ValidationMessageFor(model => model.Rate) 
    </div> 

    <p> 
     <input type="submit" value="Save" /> 
    </p> 
</fieldset> 

}

Cambio @ Html.EditorFor (modelo => model.Currency) a @ Html.DisplayFor (modelo => model.Currency) no funciona debido a que el modelo de estado deja de ser válido cuando se mensajes de vuelta al controlador.

Respuesta

10

Se podría añadir

@Html.HiddenFor(model => model.Currency) 

en su forma y luego usar

@Html.DisplayFor(model=> model.Currency) 

para visualizar el valor de sólo lectura de la propiedad de divisas. De esta forma, cuando publique el valor, se lo enviará junto con el modelo publicado.

+0

Esto también funciona en combinación con Twitter bootstrap, p. usando lo siguiente en la vista: ' @ Html.DisplayFor (m => m.ProductName)' – Manfred

+1

¿El usuario no puede editar los campos read-olny a través de Firebug, etc.? – Sami

4

que estás buscando:

[HiddenInput(DisplayValue=true)] 

A continuación, mostrar el editor y no la pantalla (utilizar EditorFor).

Esto muestra el valor de solo lectura, pero agrega una entrada oculta para que el estado publicado sea válido.

+0

Probé esto con MVC 4 pero no funcionó para mí y resultó en solo oculto. No se muestra nada con EditorFor(). Sin embargo, puede haber pasado por alto algo. Fui por la solución de @mreyeros que funcionó para mí. – Manfred

3

Para mostrar la moneda, pero no editarlo tratar

@Html.Label("Currency", Model.Currency) 

si también necesita fijar el valor de la moneda de vuelta al controlador tratar

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

espero que esto ayude.

+0

Gracias, utilicé esta solución – alpinescrambler

+0

Si te gustó mi solución, votala :) –

Cuestiones relacionadas