Формат html.TextboxFor значение по умолчанию для Integer / Decimal должно быть пустым вместо 0
Я использую по умолчанию asp.net в MVC 2 синтаксис, чтобы создать текстовое поле, которое является целое число или десятичную для меня asp.net в MVC веб-приложение:
<%: Html.TextBoxFor(model => model.Loan.InterestRate) %>
довольно прямолинейно, но проблема по своей сути заключается в том, что мои объекты модели привязки являются десятичными или int и не обнуляются, они печатают свое значение как ноль (0) При загрузке страницы, если моя модель пуста (например, в режиме добавления для шаблона CRUD), а ноль-неправильное значение и недействителен для проверки моей страницы.
Как могу ли я иметь текстовые поля, которые не имеют начального значения, просто пустое текстовое поле, я понимаю, что ноль-это потенциальное значение, но я все равно принимаю значения больше нуля, поэтому для меня это не проблема.
Я даже пробовал кастинг как десятичное число с нулевым значением, а также не для помощника (что не идеально), но, увы, я все еще получаю значение по умолчанию "0". есть идеи??
<%: Html.TextBox("Loan.InterestRate", Model.Loan.InterestRate == 0 ?
(decimal?)null : Model.Loan.InterestRate) %>
8 ответов:
вы можете переопределить шаблон по умолчанию, поместив пользовательский шаблон в /Shared /EditorTemplates или контроллер в/ControllerName / EditorTemplates.
Я использую это для целых. Его назвали типа 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)%>
в вашей модели добавить DisplayFormat атрибут
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:#.#}")] decimal InterestRate { get; set; }
View
@Html.TextBoxFor(model => model.InterestRate)
это выводит пустой вместо 0. Больше примеров формата здесь
обновление
TextBoxFor does не работает с форматом, но EditorFor делает:
@Html.EditorFor(model => model.InterestRate)
обновление 2
Он работает для TextBoxFor таким образом:
@Html.TextBoxFor(model => model.InterestRate, "{0:#.#}")
еще один может быть, чтобы проверить значение
@Html.TextBoxFor (m => m.CertificateID, new { @Value = (Model.CertificateID > 0 ?Model.CertificateID.ToString() :string.Empty) })
Как насчет "" вместо null.
<%: Html.TextBox("Loan.InterestRate", Model.Loan.InterestRate == 0 ? "" : Model.Loan.InterestRate) %>
также почему это не кредит.Обнуляемого процентной ставки?
<%: Html.TextBox("Loan.InterestRate", Model.Loan.InterestRate ?? "") %>
альтернативным решением является использование jQuery для замены нулей пустой строкой при загрузке страницы. Выберите любое имя для использования в качестве имени класса для всех полей ввода, которые должны быть заполнены пустой строкой вместо нуля. Например, ненулевое число.
@Html.TextBoxFor(model => model.InterestRate, new { @class = "non-zero-num" })
и добавьте на свою страницу следующий скрипт:
<script> $(document).ready(function(){ $(".non-zero-num").val($(this).val() == 0 ? '' : $(this).val()); }) </script>
Я думаю, что ответ @jfar указывает в правильном направлении, но Int32.ascx должен быть таким
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Int32>" %> <% string displayText; if (Model == 0) { displayText = ""; } else { displayText = Model.ToString(); } %> <%= Html.TextBox("", displayText)%>
или обновленный ответ с помощью Razor (/Shared/EditorTemplates/Int32.cshtml)
@model Int32 @{ string text = Model == 0 ? "" : Model.ToString(); } @Html.TextBox("", text)
вот что вы можете сделать: (VB код)
это ядро:
@IIf(Model.YourNumericValue = 0, "", Model.YourNumericValue)
вот если вы используете HTML для отображения текстового поля
<input type="text" name="sYourTextboxName" value="@IIf(Model.YourNumericValue= 0, "", Model.YourNumericValue))">
вот если вы используете HTML helper для визуализации текстового поля
@Html.TextBox("sYourTextboxName", IIf(Model.YourNumericValue= 0, "", Model.YourNumericValue))
IIf-это очень удобная линейная функция - так она работает.
IIf(Expression, TruePart, FalsePart)
так что в основном вы говорите - если мой параметр = 0-я ничего не хочу выводить, строка.Пустой, нулевой, "" - и для ложной части - это похоже на-О, если мой параметр не равен 0-тогда это должно быть что - то другое, чем 0-поэтому я выведу свое числовое значение, не беспокоясь о том, что ноль будет в текстовом поле.
или как вы хотите его структурировать.
надеюсь, что помогла!