51 messaggi dal 02 settembre 2002
CIao

sto sviluppando la mia prima applicazione in Mvc 5 e sto riscontrando alcuni problemi che magari, per chi ha esperienza, sono di facile soluzione.

Ho una classe con una proprietà decimal not null (gestita con EF 6).

Nella view, quando recupero nella pagina di modifica il campo tramite un Html.TextBoxFor, il campo testuale mostra 0 anzichè una stringa vuota.

Sicuramente dipende dal fatto che il campo lato model, non accetta valori nulli (e controllo l'inserimento di un valore tramite validazione), ma la visualizzazione di questo valore predefinito sicuramente è "scomodo" dovendo presentare un form ad un utente..

E' possibile quindi in qualche modo bypassare questo il comportamento predefinito di Mvc in questi casi?

Grazie in anticipo
Hai definito il tipo della proprietà che finisce nel textbox come Nullable?

Ormai programmano tutti... ma la professionalità appartiene a pochi
51 messaggi dal 02 settembre 2002
Ciao

direttamente sulla classe generata da EF non potrei farlo perchè qualsiasi modifica manuale verrebbe sovrascritta al prossimo aggiornamento.

Ho provato a settarla sulla classe MetaData che utilizzo per le DataAnnotation ma non ha effetti..

(se è in queste classi che intendi..)

Grazie..
51 messaggi dal 02 settembre 2002
Nessuno hai mai affrontato e risolto questo problema?


alexenter ha scritto:
Ciao

direttamente sulla classe generata da EF non potrei farlo perchè qualsiasi modifica manuale verrebbe sovrascritta al prossimo aggiornamento.

Ho provato a settarla sulla classe MetaData che utilizzo per le DataAnnotation ma non ha effetti..

(se è in queste classi che intendi..)

Grazie..
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,


Nella view, quando recupero nella pagina di modifica il campo tramite un Html.TextBoxFor, il campo testuale mostra 0 anzichè una stringa vuota.

E' normale che sia così, perché lo 0 è un valore valido per un decimal.
C'è una soluzione che sfrutta il formato di conversione a stringa, ed è il seguente.
@Html.TextBoxFor(model => model.Prezzo, "{0:#.#}")


L'aver indicato il carattere # (che sta ad indicare "opzionale") sia per la parte intera che per i decimali, produrrà una stringa vuota nel momento in cui entrambi sono assenti (cioè il valore è 0).
Lo vedi qui; usando quel formato la stringa prodotta sarà vuota.
https://dotnetfiddle.net/6WRgGk

L'altra soluzione consisterebbe nel realizzare un EditorTemplate personalizzato per il tipo decimal.
http://www.codeguru.com/csharp/.net/net_asp/mvc/using-display-templates-and-editor-templates-in-asp.net-mvc.htm


Comunque, dovresti chiederti se queste queste soluzioni non vadano a nascondere un problema più profondo.
Come diceva giustamente Manuel, l'assenza di valore dovrebbe essere rappresentata da null, e non dallo 0, a cui tu stai assegnando un significato speciale. Quindi avrebbe più senso forse creare un ViewModel in cui la proprietà decimal sia Nullable. Quando l'utente invia il form, scrivi della logica per rimappare i valori ottenuti dal form sulla classe di entità che persisti con EF6.
Spesso, quando si accetta l'idea di creare dei ViewModel, subito vengono alla mente tante altre differenze che lo porterebbero a deviare ulteriormente dalle classi di entità. Questo ti fa capire che di quelle differenze eravamo al corrente anche prima, è solo che non ci badavamo perché il pensiero di dover creare ancora altre classi è fastidioso.

ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.