Domanda

Quindi sto cercando di muovermi MVC 1.0 a MVC 2.0 RTM. Una delle convenzioni che vorrei iniziare a seguire è l'utilizzo degli aiutanti HTML di tipo forte per generare controlli come caselle di testo.

Tuttavia, sembra che non sarà un salto facile. Ho provato a migrare la mia prima forma, sostituendo linee in questo modo:

<%= Html.TextBox("FirstName", Model.Data.FirstName, new {maxlength = 30}) %>

... per linee come questa:

<%= Html.TextBoxFor(x => x.Data.FirstName, new {maxlength = 30}) %>

In precedenza, questo mappare nel suo modello di vista appropriato su un post, usando la seguente firma del metodo:

[HttpPost]
public ActionResult Registration(AccountViewInfo viewInfo)

Invece, attualmente ottiene un oggetto vuoto indietro. Credo che la disconnessione sia nel fatto che passiamo il modello di vista in un oggetto aggregato più ampio che ha alcuni metadati di pagina e altre cose divertenti insieme (quindi x.Data.FirstName invece di x.FirstName).

Quindi la mia domanda è: qual è il modo migliore per utilizzare gli aiutanti fortemente che consentono ancora al framework MVC di lanciare in modo appropriato la raccolta di moduli sul mio modello di vista come nella linea originale? C'è un modo per farlo senza cambiare il tipo aggregato che passiamo alla vista?

Grazie!

AGGIORNARE: Quindi l'attributo di Bind ha funzionato bene, ma non mi piaceva il modo in cui ho dovuto applicarlo essenzialmente a tutti i modelli di visualizzazione pubblicati. Ho finito per cambiare la gerarchia dell'eredità in modo tale che tutti i nostri modelli di visualizzazione ereditano da una classe di base che contiene contenuti di pagina e altri meta dati, invece di essere una proprietà aggregata denominata Data.

È stato utile?

Soluzione

public ActionResult Registration([Bind(Prefix = "data")] AccountViewInfo viewInfo);

Questo dice al raccoglitore che dovrebbe aspettarsi che tutti i valori iniziano dati, quindi cercherà data.FirstName, eccetera.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top