Domanda

Prima di tutto un po 'di contesto :

Ho una forma, dove mi post indietro alcuni oggetti che si materializzano automaticamente in oggetti da MVC incorporato ModelBinder:

<input type="hidden" name="myobj[0].Id" />
<input type="text" name="myobj[0].Hours" />
<input type="hidden" name="myobj[1].Id" />
<input type="text" name="myobj[1].Hours" />

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Save(IList<MyObject> myobj);

Inoltre:. Vorrei sottolineare che stiamo postando DTO (DataTransferObjects) che più in basso la mappa linea in entità Entity Framework, così avremmo preferito non come il nulla cambiamento sul DTO tranne forse l'aggiunta di attributi

problema

Se un utente immette un valore non valido per "Ore", dicono 'Fubar', allora il ModelBinder, naturalmente, non tenterà di impostare la 'Hours'-proprietà. Ma il valore predefinito è 0, perché è un int e non un stringa .

Questo fa sì che una certa difficoltà per me naturalmente, perché ora non riesco a vedere se l'utente ha effettivamente accreditato 0, o se questo è stato causato da dati non validi.

Dal momento che sto usando un (Entity Framework) mapper casa laminati oggetto-to-entità, non possiamo cambiare il foot-print del 'Hours'-struttura al int? . Sono consapevole che MVC è un po 'costruito in validazione, ma preferirei non attuare tale dal momento che sappiamo che è stato selvaggiamente aggredito e che ci sia qualche nuova validazione venire in ASP.NET MVC 2.0.

Soluzione?

Ho bisogno di essere in grado di segnalare all'utente quale campo non è corretto, in modo che significa in qualche modo bisogno di essere in grado di catturare un'eccezione (o forse qualche altra soluzione ingegnosa?), Dove posso fare un po 'di logica e post indietro di una nuova visione per l'utente dove ho chiarire quello che hanno fatto in modo non corretto.

Il mio attuale idea:. Scrivi ModelBinder personalizzato

Cosa suggerisci?

È stato utile?

Soluzione

  

Questo fa sì che una certa difficoltà per me naturalmente, perché ora non riesco a vedere se l'utente ha effettivamente accreditato 0, o se questo è stato causato da dati non validi.

Sì, è possibile. Guarda nel ModelState.

Altri suggerimenti

Anche se questo non è particolarmente ideale, hai affermato che non si vuole cambiare niente altro. Quindi l'opzione che ha citato, la creazione di un ModelBinder personalizzato funzionerà bene. Tuttavia, si potrebbe trovare se stessi creando un ModelBinder per ogni entità che si desidera associare.

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