C# 如何使用Html.TextBoxFor设置默认值?
简单的问题是,如果使用ASP.NET MVC Framework 1中的Html帮助程序,很容易在文本框上设置默认值,因为存在重载C# 如何使用Html.TextBoxFor设置默认值?,c#,asp.net-mvc-2,html-helper,C#,Asp.net Mvc 2,Html Helper,简单的问题是,如果使用ASP.NET MVC Framework 1中的Html帮助程序,很容易在文本框上设置默认值,因为存在重载Html.textbox(字符串名称、对象值)。当我尝试使用Html.TextBoxFor方法时,我的第一个猜测是尝试以下不起作用的方法: <%: Html.TextBoxFor(x => x.Age, new { value = "0"}) %> x.Age,新的{value=“0”})%> 我现在应该继续使用Html.TextBox(字符串、
Html.textbox(字符串名称、对象值)
。当我尝试使用Html.TextBoxFor方法时,我的第一个猜测是尝试以下不起作用的方法:
<%: Html.TextBoxFor(x => x.Age, new { value = "0"}) %>
x.Age,新的{value=“0”})%>
我现在应该继续使用Html.TextBox(字符串、对象)吗?默认值将是
Model.Age
属性的值。这就是关键所在。事实证明,如果您不在控制器中为视图方法指定模型,它就不会为您创建具有默认值的对象
[AcceptVerbs(HttpVerbs.Get)]
public ViewResult Create()
{
// Loads default values
Instructor i = new Instructor();
return View("Create", i);
}
[AcceptVerbs(HttpVerbs.Get)]
public ViewResult Create()
{
// Does not load default values from instructor
return View("Create");
}
你可以试试这个
<%= Html.TextBoxFor(x => x.Age, new { @Value = "0"}) %>
x.Age,新的{@Value=“0”})%>
这应该适用于MVC3和MVC4
@Html.TextBoxFor(m => m.Age, new { @Value = "12" })
如果希望它是一个隐藏字段
@Html.TextBoxFor(m => m.Age, new { @Value = "12",@type="hidden" })
如果您有一个用于编辑和添加的部分页面表单,那么我将默认值设置为
0
的技巧是执行以下操作:
@Html.TextBox("Age", Model.Age ?? 0)
这样,如果未设置,则为0
,如果存在,则为实际年龄。您只需执行以下操作:
<%= Html.TextBoxFor(x => x.Age, new { @Value = "0"}) %>
也可以尝试这个方法,即删除新的{}并用字符串替换它
<%: Html.TextBoxFor(x => x.Age,"0") %>
x.Age,“0”)%%>
使用@Value
是一种攻击,因为它输出两个属性,例如:
<input type="..." Value="foo" value=""/>
我是这样解决的。如果您也使用此选项进行编辑,则此选项有效
@Html.TextBoxFor(m => m.Age, new { Value = Model.Age.ToString() ?? "0" })
value=“0”将为@Html.TextBoxfor设置解除值
它区分大小写
“v”应该是大写
以下是工作示例:
@Html.TextBoxFor(m => m.Nights,
new { @min = "1", @max = "10", @type = "number", @id = "Nights", @name = "Nights", Value = "1" })
这对我来说很有效,通过这种方式,我们将默认值设置为空字符串
@Html.TextBoxFor(m => m.Id, new { @Value = "" })
这是我的工作
@Html.TextBoxFor(model => model.Age, htmlAttributes: new { @Value = "" })
想知道为什么大写字母“V”有效而小写字母“V”无效吗?此外,此解决方案会覆盖年龄的模型值,即使存在。带小v的值是C#的关键字。所以我认为这就是它不起作用的原因。对评论投了赞成票,因为对一个如此晦涩和有见地的答案投了一票。。。不充分。令人好奇的是@value不起作用。readonly也是C#的一个关键字,但@readonly的工作没有任何问题。浏览器中的html源代码是在使用@Value时生成的。输入标记中既有带“0”的“Value”,也有带“0”的“Value”。当模型管理默认值时,这似乎是个坏主意。当不同的默认值需要相同的模型项集合时,应该怎么做?@RredCat同意,这会混淆UI层的分离。对于隐藏字段,只需使用@Html.HiddenFor(m=>m.Age,new{@value=“12”})好的@Html.HiddenFor(m=>m.Age,new{@value=“12”})不是wokringAnd为什么要像这样隐藏硬编码的默认值?非感官年龄是一个整数,这是行不通的;它需要是一个可为null的int。更有可能是MVC的bug或特性,因为Html.PasswordFor(m=>m.Password,new{class=“form control”,value=“default”被渲染成几乎相同的Html,“default”转到成功显示的值。例如,value=Model.Email起作用,但value=ViewBag.Email起作用。因此,这个被接受的答案更好、更清晰,而不是太刻薄。什么是
讲师
?虽然这段代码可以回答问题,但最好包含一些上下文,解释它是如何工作的以及何时使用它。仅代码答案从长远来看是没有用的。@Bono添加了一些注释,如果年龄为null。。您将得到一个null指针异常,因为??将尝试检查ToString()的返回。@eaglei22 Nullable.ToString()如果值为null,则将返回空字符串。感谢您演示如何在匿名对象中建模绑定使用此x.Age,new{value=“0”})%>,在值中进行小的更改V大写字母。+1表示命名参数,该参数在复制/可复制代码中特别有用,并且使用具有许多重载的方法
@Html.TextBoxFor(m => m.Id, new { @Value = "" })
@Html.TextBoxFor(model => model.Age, htmlAttributes: new { @Value = "" })