tutorial net mvc español ejemplo create asp c# .net asp.net-mvc

c# - net - Html.TextboxDe valor predeterminado para Integer/Decimal para que esté vacío en lugar de 0



mvc c# (8)

¿Qué pasa con "" en lugar de nulo.

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

¿Por qué tampoco es Loan.InterestRate nullable?

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

Estoy usando la sintaxis asp.net MVC 2 predeterminada para construir TextBox que son enteros o decimales para mi aplicación web asp.net MVC:

<%: Html.TextBoxFor(model => model.Loan.InterestRate) %>

bastante directo, pero el problema es intrínsecamente al hecho de que mis objetos de modelo de enlace son decimales o int y no aceptan nulos, imprimen su valor como cero (0) en la carga de la página si mi modelo está vacío (como en el modo agregar para un Plantilla CRUD) y cero es un valor incorrecto y tampoco es válido para la validación de mi página.

¿Cómo podría tener cuadros de texto que no tienen valor de inicio, solo un cuadro de texto vacío, entiendo que cero es un valor potencial, pero solo acepto valores mayores que cero de todos modos, así que esto no es un problema para mí.

Incluso traté de convertirme en un decimal con nulos y también en un no-para-ayudante (lo cual no es ideal), pero, ¡ay !, sigo recibiendo el valor ''0'' predeterminado. ¿¿algunas ideas??

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


Creo que la respuesta de @ jfar apunta en la dirección correcta, pero el Int32.ascx debería ser este

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

o respuesta actualizada usando Razor (/Shared/EditorTemplates/Int32.cshtml)

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


En su modelo, agregue el atributo DisplayFormat

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

Ver

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

Esto produce vacío en lugar de 0. Más ejemplos de formato aquí

Actualizar

TextBoxFor does`s no funciona con formato, pero EditorFor hace:

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

Actualización 2

Funciona para TextBoxPor esta forma:

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


Esto es lo que puede hacer: (Código VB)

Este es el núcleo:

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

Aquí está si usa el HTML para renderizar su cuadro de texto

<input type="text" name="sYourTextboxName" value="@IIf(Model.YourNumericValue= 0, "", Model.YourNumericValue))">

Aquí está si usas HTML helper para renderizar tu cuadro de texto

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

IIf es una función muy práctica de una línea: la forma en que funciona es la siguiente.

IIf(Expression, TruePart, FalsePart)

Básicamente, usted dice que si mi parámetro = 0, no quiero dar salida a nada, String.Empty, Null, "" y para la parte falsa, es como oh si mi parámetro no es igual a 0, entonces debe ser algo que no sea 0 - entonces daré salida a mi valor numérico sin preocuparme de que el cero esté en el cuadro de texto.

O como quieras estructurarlo.

Espero que haya ayudado!


Otro podría ser verificar el valor

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


Puede anular la plantilla predeterminada colocando una plantilla personalizada en / Shared / EditorTemplates o mediante el controlador en / ControllerName / EditorTemplates.

Yo uso este para Int. Su nombre 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)%>


Una solución alternativa es usar jQuery para reemplazar ceros con cadena vacía cuando se carga la página. Elija cualquier nombre para usar como nombre de clase para todos los campos de entrada que deben rellenarse con cadena vacía en lugar de cero. Por ejemplo, no cero-num.

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

Y agrega la siguiente secuencia de comandos en tu página:

<script> $(document).ready(function(){ $(".non-zero-num").val($(this).val() == 0 ? '''' : $(this).val()); }) </script>


Yo uso esta solución:

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

consulte: https://.com/a/6186576/297487