Html.TextboxFor valeur par défaut pour Integer / Decimal pour être vide au lieu de 0

J’utilise la syntaxe par défaut asp.net MVC 2 pour construire des TextBox qui sont des nombres entiers ou décimaux pour mon application Web asp.net MVC:

 model.Loan.InterestRate) %> 

plutôt simple, mais le problème est inhérent au fait que mes objects de modèle de liaison sont décimaux ou int et non nullables, ils impriment leur valeur à zéro (0) lors du chargement de la page si mon modèle est vide (comme dans le mode add pour un Modèle CRUD) et zéro est une valeur incorrecte et est invalide pour la validation de ma page également.

Comment pourrais-je avoir des zones de texte qui n’ont pas de valeur initiale, juste une zone de texte vide, je comprends que zéro est une valeur potentielle, mais je n’accepte de toute façon que des valeurs supérieures à zéro, donc ce n’est pas un problème pour moi.

J’ai même essayé de lancer en tant que décimale nullable et aussi comme non-assistant (ce qui n’est pas idéal), mais hélas, je reçois toujours la valeur par défaut ‘0’. des idées??

  

Vous pouvez remplacer le modèle par défaut en plaçant un modèle personnalisé dans / Shared / EditorTemplates ou par contrôleur dans / ControllerName / EditorTemplates.

J’utilise celui-ci pour les Int. Son nommé Int32.ascx:

 <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> <%@ Import Namespace="System.Web.Mvc.Html" %> <% string displayText = string.Empty; if (Model != null) { displayText = Model.ToString(); } %> <%= Html.TextBox("", displayText)%> 

Dans votre modèle, ajoutez l’atsortingbut DisplayFormat

 [DisplayFormat(ApplyFormatInEditMode = true, DataFormatSsortingng = "{0:#.#}")] decimal InterestRate { get; set; } 

Vue

 @Html.TextBoxFor(model => model.InterestRate) 

Cette sortie est vide au lieu de 0. Plus d’exemples de format ici

Mettre à jour

TextBoxFor ne fonctionne pas avec le format, mais EditorFor le fait:

 @Html.EditorFor(model => model.InterestRate) 

Mise à jour 2

Cela fonctionne pour TextBoxFor de cette façon:

 @Html.TextBoxFor(model => model.InterestRate, "{0:#.#}") 

J’utilise cette solution:

  @Html.TextBoxFor(model => model.Year, new { Value = "" }) 

reportez-vous à: https://stackoverflow.com/a/6186576/297487

Un autre pourrait être de vérifier la valeur

 @Html.TextBoxFor (m => m.CertificateID, new { @Value = (Model.CertificateID > 0 ?Model.CertificateID.ToSsortingng() :ssortingng.Empty) }) 

Qu’en est-il de “” au lieu de null.

  <%: Html.TextBox("Loan.InterestRate", Model.Loan.InterestRate == 0 ? "" : Model.Loan.InterestRate) %> 

Aussi pourquoi n’est pas Loan.InterestRate nullable?

 <%: Html.TextBox("Loan.InterestRate", Model.Loan.InterestRate ?? "") %> 

Une autre solution consiste à utiliser jQuery pour remplacer les zéros par une chaîne vide lors du chargement de la page. Choisissez n’importe quel nom à utiliser comme nom de classe pour tous les champs de saisie qui doivent être remplis avec une chaîne vide au lieu de zéro. Par exemple, non-zéro-num.

 @Html.TextBoxFor(model => model.InterestRate, new { @class = "non-zero-num" }) 

Et ajoutez le script suivant sur votre page:

  

Je pense que la réponse de @ jfar va dans la bonne direction mais Int32.ascx devrait être ce

 <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> <% string displayText; if (Model == 0) { displayText = ""; } else { displayText = Model.ToString(); } %> <%= Html.TextBox("", displayText)%> 

ou réponse mise à jour en utilisant Razor (/Shared/EditorTemplates/Int32.cshtml)

 @model Int32 @{ ssortingng text = Model == 0 ? "" : Model.ToSsortingng(); } @Html.TextBox("", text) 

Voici ce que vous pouvez faire: (code VB)

C’est le kernel:

@IIf(Model.YourNumericValue = 0, "", Model.YourNumericValue)

Voici si vous utilisez le HTML pour rendre votre zone de texte

  

Voici si vous utilisez l’aide HTML pour vous rendre textbox

  @Html.TextBox("sYourTextboxName", IIf(Model.YourNumericValue= 0, "", Model.YourNumericValue)) 

IIf est une fonctionnalité très pratique en une seule ligne – la façon dont cela fonctionne est la suivante.

 IIf(Expression, TruePart, FalsePart) 

Donc, fondamentalement, vous dites – si mon paramètre = 0 – je ne veux rien afficher, Ssortingng.Empty, Null, “” – et pour la fausse partie – c’est comme – oh si mon paramètre n’est pas égal à 0 – alors cela doit être quelque chose d’autre que 0 – je vais donc sortir la valeur numérique sans craindre que le zéro soit dans la zone de texte.

Ou si vous voulez le structurer.

J’espère que ça a aidé!