2011-12-30 11 views
8

Ho questo modello:MVC 3 modificare vista per alcuni settori solo

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

Il "Crea" Vista sta lavorando bene, ma quando sono nella vista edit, voglio solo la proprietà valuta da visualizzare e non modificabile. Come dovrei farlo? Se creo un altro modello di "sola visione" per questa classe, allora ometterei la proprietà "Valuta" e non sarei in grado di visualizzarla.

@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> 

}

Modifica @ Html.EditorFor (modello => model.Currency) a @ Html.DisplayFor (modello => model.Currency) non funziona perché lo stato modello non è più valido quando si invia di nuovo al controller.

risposta

10

Si potrebbe aggiungere

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

nel modulo e quindi utilizzare

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

per visualizzare il valore in sola lettura della proprietà valuta. In questo modo, quando pubblichi il valore, verrà inviato insieme al modello pubblicato.

+0

Funziona anche in combinazione con il bootstrap di Twitter, ad es. nella seguente vista: ' @ Html.DisplayFor (m => m.ProductName)' – Manfred

+1

L'utente non può modificare i campi read-olny tramite firebug ecc.? – Sami

4

siete alla ricerca di:

[HiddenInput(DisplayValue=true)] 

Poi mostra l'editor, non il display (utilizzare EditorFor).

Questo visualizza il valore di sola lettura, ma aggiunge un input nascosto in modo che lo stato inviato sia valido.

+0

Provato questo con MVC 4 ma non ha funzionato per me e ha provocato solo nascosto. Niente viene visualizzato con EditorFor(). Forse ho trascurato qualcosa. Sono andato per la soluzione di @mreyeros che ha funzionato per me. – Manfred

3

Per visualizzare la moneta, ma non modificarlo provare

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

se avete bisogno anche di inviare il valore della valuta al controller provare

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

Spero che questo aiuta.

+0

Grazie, ho usato questa soluzione – alpinescrambler

+0

Se ti è piaciuta la mia soluzione, vota per favore :) –

Problemi correlati