Html.TextboxFor значение по умолчанию для Integer/Decimal должно быть пустым, а не 0
Я использую синтаксис asp.net MVC 2 по умолчанию для создания TextBox, которые являются целыми или десятичными для моего веб-приложения asp.net MVC:
<%: Html.TextBoxFor(model => model.Loan.InterestRate) %>
довольно прямолинейно, но проблема заключается в том, что мои объекты привязывающей модели являются десятичными или int и не являются нулевыми, они печатают свое значение как ноль (0) при загрузке страницы, если моя модель пуста (например, в add режим для шаблона CRUD), а ноль - неправильное значение и также недействительно для проверки моей страницы.
Как я могу иметь текстовые поля, которые не имеют начального значения, просто пустое текстовое поле, я понимаю, что ноль является потенциальным значением, но я все равно принимаю значения больше нуля, поэтому для меня это не проблема.
Я даже попробовал кастинг как десятичное число с нулевым значением, а также не-помощник (что не идеально), но, увы, я все еще получаю значение по умолчанию "0". любые идеи?
<%: Html.TextBox("Loan.InterestRate", Model.Loan.InterestRate == 0 ?
(decimal?)null : Model.Loan.InterestRate) %>
Ответы
Ответ 1
Вы можете переопределить шаблон по умолчанию, поместив собственный шаблон в /Shared/EditorTemplates или с помощью контроллера в /ControllerName/EditorTemplates.
Я использую этот для Int. Его имя 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)%>
Ответ 2
Я использую это решение:
@Html.TextBoxFor(model => model.Year, new { Value = "" })
обратитесь к: fooobar.com/questions/126325/...
Ответ 3
В вашей модели добавьте атрибут DisplayFormat
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:#.#}")]
decimal InterestRate { get; set; }
Вид
@Html.TextBoxFor(model => model.InterestRate)
Это выводит пустую вместо 0.
Более подробные примеры здесь
Обновление
TextBoxFor не работает с форматом, но EditorFor делает:
@Html.EditorFor(model => model.InterestRate)
Обновление 2
Это работает для TextBoxДля этого способа:
@Html.TextBoxFor(model => model.InterestRate, "{0:#.#}")
Ответ 4
Другим может быть проверка значения
@Html.TextBoxFor
(m => m.CertificateID, new { @Value = (Model.CertificateID > 0 ?Model.CertificateID.ToString() :string.Empty) })
Ответ 5
Как насчет "" вместо null.
<%: Html.TextBox("Loan.InterestRate",
Model.Loan.InterestRate == 0 ? "" : Model.Loan.InterestRate) %>
Также почему isnt Loan.InterestRate имеет значение NULL?
<%: Html.TextBox("Loan.InterestRate", Model.Loan.InterestRate ?? "") %>
Ответ 6
Альтернативным решением является использование jQuery для замены нулей пустой строкой при загрузке страницы.
Выберите любое имя для использования в качестве имени класса для всех полей ввода, которые должны быть заполнены пустой строкой вместо нуля. Например, ненулевое число.
@Html.TextBoxFor(model => model.InterestRate, new { @class = "non-zero-num" })
И добавьте следующий script на свою страницу:
<script>
$(document).ready(function(){
$(".non-zero-num").val($(this).val() == 0 ? '' : $(this).val());
})
</script>
Ответ 7
Я думаю, что @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)
Ответ 8
Вот что вы можете сделать: (код VB)
Это ядро:
@IIf(Model.YourNumericValue = 0, "", Model.YourNumericValue)
Вот если вы используете HTML для рендеринга вашего текстового поля
<input type="text" name="sYourTextboxName" value="@IIf(Model.YourNumericValue= 0, "", Model.YourNumericValue))">
Вот, если вы используете HTML-помощник для визуализации текстового поля
@Html.TextBox("sYourTextboxName", IIf(Model.YourNumericValue= 0, "", Model.YourNumericValue))
IIf - очень удобная функция с одной строкой - так она работает.
IIf(Expression, TruePart, FalsePart)
Итак, в основном вы говорите - если мой параметр = 0 - я ничего не хочу выводить, String.Empty, Null, "" - и для ложной части - это как - о, если мой параметр не равен 0 - тогда это должно быть что-то отличное от 0 - поэтому я вывешу свое числовое значение, не беспокоясь о том, что ноль будет в текстовом поле.
Или, тем не менее, вы хотите его структурировать.
Надеюсь, что это помогло!