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

dco*_*led 195 c# html-helper asp.net-mvc-2

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

<%: Html.TextBoxFor(x => x.Age, new { value = "0"}) %>
Run Code Online (Sandbox Code Playgroud)

我现在应该坚持使用Html.TextBox(字符串,对象)吗?

Tas*_*que 346

你可以试试这个

<%= Html.TextBoxFor(x => x.Age, new { @Value = "0"}) %>
Run Code Online (Sandbox Code Playgroud)

  • 小v的值是C#的关键字http://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx.所以我认为这就是为什么它不起作用. (69认同)
  • 很想知道为什么资本'V'起作用而小写'v'不起作用?此外,此解决方案会覆盖Age的模型值,即使存在一个. (43认同)
  • 使用@Value时,浏览器中的html源是<input Value ="0"id ="Age"name ="Age"type ="text"value =""/>.在输入标签中,"Value"为"0","value"为"". (16认同)
  • 仍然很奇怪@value不起作用.readonly也是C#的关键字,但@readonly没有任何问题. (8认同)
  • 赞成评论,因为一个赞成这个模糊和富有洞察力的答案似乎......不合适. (2认同)
  • `value`是C#中的上下文关键字,仅在属性getter和setter中具有特殊含义.我的猜测是MVC代码被硬编码以寻找"值",因为MS打算总是使用PascalCase属性名称,因为这是它们的典型约定并且避免与非上下文关键字(例如`class`)冲突.无论如何,它都以HTML格式呈现为小写.[详细](http://stackoverflow.com/a/15271804/145173) (2认同)

Gok*_*kul 59

这适用于MVC3和MVC4

 @Html.TextBoxFor(m => m.Age, new { @Value = "12" }) 
Run Code Online (Sandbox Code Playgroud)

如果你想让它成为一个隐藏的领域

 @Html.TextBoxFor(m => m.Age, new { @Value = "12",@type="hidden" }) 
Run Code Online (Sandbox Code Playgroud)

  • 对于隐藏字段,只需使用@ Html.HiddenFor(m => m.Age,new {@Value ="12"}) (19认同)

dco*_*led 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");
}
Run Code Online (Sandbox Code Playgroud)


Fyo*_*kin 20

默认值将是您的Model.Age属性的值.这就是重点.

  • 模型管理默认值时似乎不太好.当相同的模型项集合需要不同的默认值时应该怎么做? (3认同)

Cht*_*lek 17

你可以简单地做:

<%= Html.TextBoxFor(x => x.Age, new { @Value = "0"}) %>
Run Code Online (Sandbox Code Playgroud)

或者更好,如果模型为空,这将切换到默认值'0',例如,如果编辑和创建具有相同的视图:

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


小智 11

value ="0"将为@ Html.TextBoxfor设置defualt值

其区分大小写的"v"应该是资本

以下是工作示例:

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


小智 9

这对我有用

@Html.TextBoxFor(model => model.Age, htmlAttributes: new { @Value = "" })
Run Code Online (Sandbox Code Playgroud)


Max*_*oro 8

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

<input type="..." Value="foo" value=""/>
Run Code Online (Sandbox Code Playgroud)

你应该这样做:

@Html.TextBox(Html.NameFor(p => p.FirstName).ToString(), "foo")
Run Code Online (Sandbox Code Playgroud)


use*_*893 8

这是我解决它的方式.如果您也使用它进行编辑,则此方法有效.

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


eri*_*eri 7

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

@Html.TextBoxFor(m => m.Id, new { @Value = "" })
Run Code Online (Sandbox Code Playgroud)

  • 虽然此代码可能会回答这个问题,但最好包含一些上下文,解释它是如何工作的以及何时使用它.从长远来看,仅代码的答案无用. (2认同)

小智 5

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

@Html.TextBox("Age", Model.Age ?? 0)
Run Code Online (Sandbox Code Playgroud)

这样,0如果没有设置,或者如果它存在则是实际年龄.