GON*_*ale 52 .net c# asp.net-mvc
我使用默认的asp.net MVC 2语法来构造我的asp.net MVC Web应用程序的整数或十进制TextBox:
<%: Html.TextBoxFor(model => model.Loan.InterestRate) %>
Run Code Online (Sandbox Code Playgroud)
非常简单,但问题本质上是我的绑定模型对象是十进制或int和不可空的事实,如果我的模型是空的,它们在页面加载时将它们的值打印为零(0)(例如在添加模式中为CRUD模板)和零值不正确,对我的页面验证也无效.
我怎么能有没有起始值的文本框,只是一个空的文本框,我知道零是一个潜在的值,但我只接受大于零的值,所以这对我来说不是问题.
我甚至尝试将其作为可以为空的十进制进行投射,也尝试使用非助手(这并不理想),但是,我仍然接收默认的"0"值.有任何想法吗??
<%: Html.TextBox("Loan.InterestRate", Model.Loan.InterestRate == 0 ?
(decimal?)null : Model.Loan.InterestRate) %>
Run Code Online (Sandbox Code Playgroud)
Sel*_*Sel 55
在您的模型中添加DisplayFormat属性
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:#.#}")]
decimal InterestRate { get; set; }
Run Code Online (Sandbox Code Playgroud)
视图
@Html.TextBoxFor(model => model.InterestRate)
Run Code Online (Sandbox Code Playgroud)
这输出空而不是0. 这里有更多格式示例
更新
TextBoxFor不适用于格式,但EditorFor可以:
@Html.EditorFor(model => model.InterestRate)
Run Code Online (Sandbox Code Playgroud)
更新2
它适用于TextBoxFor这样:
@Html.TextBoxFor(model => model.InterestRate, "{0:#.#}")
Run Code Online (Sandbox Code Playgroud)
Kho*_*sro 41
我使用这个解决方案:
@Html.TextBoxFor(model => model.Year, new { Value = "" })
Run Code Online (Sandbox Code Playgroud)
请参阅:https://stackoverflow.com/a/6186576/297487
Joh*_*ell 14
您可以通过将自定义模板放在/ 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)%>
Run Code Online (Sandbox Code Playgroud)
San*_*eep 11
另一个可能是检查价值
@Html.TextBoxFor
(m => m.CertificateID, new { @Value = (Model.CertificateID > 0 ?Model.CertificateID.ToString() :string.Empty) })
Run Code Online (Sandbox Code Playgroud)