如何使用Html.TextBoxFor设置默认值?


198

一个简单的问题,如果您使用ASP.NET MVC Framework 1中的Html Helper,则很容易在文本框上设置默认值,因为有重载Html.TextBox(string name, object value)。当我尝试使用Html.TextBoxFor方法时,我的第一个猜测是尝试以下不起作用的方法:

<%: Html.TextBoxFor(x => x.Age, new { value = "0"}) %>

我现在应该只坚持使用Html.TextBox(string,object)吗?


使用以下<%:Html.TextBoxFor(x => x.Age,new {Value =“ 0”})%>,对Value中的V大写进行小幅更改。
Mohan Singh

Answers:


354

你可以试试这个

<%= Html.TextBoxFor(x => x.Age, new { @Value = "0"}) %>

49
想知道为什么大写字母“ V”有效而小写字母“ v”无效吗?此外,即使存在,此解决方案也会覆盖Age的模型值。
Derek Hunziker

74
小v的值是C#msdn.microsoft.com/zh-cn/library/x9fsa0sw.aspx的关键字。所以我认为这就是为什么它不起作用。
塔萨达克州

3
对此评论表示支持,因为有人对这个晦涩而有见地的答案表示支持……不足。
ehdv'3

9
仍然好奇@value不起作用。readonly也是C#的关键字,但是@readonly可以正常工作。
迭戈

16
使用@Value时,浏览器中的html源为<input Value =“ 0” id =“ Age” name =“ Age” type =“ text” value =“” />。输入标签中同时存在“ Value”和“ 0”,以及“ value”和“”。
里奇(Ricky)

59

这应该适用于MVC3和MVC4

 @Html.TextBoxFor(m => m.Age, new { @Value = "12" }) 

如果您希望它是一个隐藏字段

 @Html.TextBoxFor(m => m.Age, new { @Value = "12",@type="hidden" }) 

21
对于隐藏的字段,只需使用@ Html.HiddenFor(m => m.Age,新的{@Value =“ 12”})
Buginator 2012年

好人@ Html.HiddenFor(m => m.Age,新的{@Value =“ 12”})无法唤醒
RollerCosta

为什么要隐藏这样的硬编码默认值?不合理
Antoine Pelletier

31

事实证明,如果未在控制器内为View方法指定Model,则不会为您创建具有默认值的对象。

[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");
}

更有可能是MVC错误或功能,因为Html.PasswordFor(m => m.Password,新的{class =“ form-control”,值=“ default”呈现为几乎相同的html,而“ default”则变为价值被成功地显示例如,值= Model.Email工作,但值= ViewBag.Email不工作所以这接受的答案是更好的和更清洁的,没有那么黑客。
ZZZ

什么Instructor
卡萨巴·托斯


18

您可以简单地做:

<%= Html.TextBoxFor(x => x.Age, new { @Value = "0"}) %>

或更好,如果模型为null,例如,如果您具有用于编辑和创建的相同视图,则它将切换为默认值'0':

@Html.TextBoxFor(x => x.Age, new { @Value = (Model==null) ? "0" : Model.Age.ToString() })

11

value =“ 0”将为@ Html.TextBoxfor设置默认值

其区分大小写的“ v”应为大写

下面是工作示例:

@Html.TextBoxFor(m => m.Nights, 
    new { @min = "1", @max = "10", @type = "number", @id = "Nights", @name = "Nights", Value = "1" })

9

这是我解决的方法。如果您也将其用于编辑,则此方法有效。

@Html.TextBoxFor(m => m.Age, new { Value = Model.Age.ToString() ?? "0" })

如果Age为null ..您将得到一个null指针异常,因为?? 将尝试检查ToString()的返回值。
eaglei22'2016-4-12

如果值为null,则@ eaglei22 Nullable <T> .ToString()将返回一个空字符串。
汤姆·林特

感谢您对如何建模绑定在一个匿名对象
前功尽弃


8

使用@Value是一种技巧,因为它输出两个属性,例如:

<input type="..." Value="foo" value=""/>

您应该改为:

@Html.TextBox(Html.NameFor(p => p.FirstName).ToString(), "foo")

7

这对我有用,这样我们将默认值设置为空字符串

@Html.TextBoxFor(m => m.Id, new { @Value = "" })

2
尽管此代码可以回答问题,但最好包含一些上下文,说明其工作方式和使用时间。从长远来看,纯代码答案没有用。
博诺

@Bono添加了一些评论
eric_eri 2016年

5

如果您有用于编辑和添加的部分页面表单,那么我使用默认值的技巧0是执行以下操作:

@Html.TextBox("Age", Model.Age ?? 0)

这样,0如果未设置,则为实际年龄;如果存在,则为实际年龄。


1
如果Age是一个int,那将行不通;它必须是可为null的int。
贾斯汀·

0

也可以尝试此操作,即删除新的{}并将其替换为字符串。

<%: Html.TextBoxFor(x => x.Age,"0") %>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.