2010-04-22 36 views
6

我有一个问题,我敢肯定很简单。我一直在使用Asp.Net MVC,并决定开始使用Asp.Net MVC 2.有些东西已经改变,现在我需要一些帮助。强类型的帮手现在写成这样 -ASP.Net MVC 2 - 需要添加一个默认属性到一个强类型的Html.Textbox助手在Asp.Net MVC 2

<%= Html.TextBoxFor(model => model.State) %> 

我需要给文本框添加一个默认值。在以前的Asp.Net MVC版本中,很容易分配一个默认值。我认为做以下的MVC 2 -

<%= Html.TextBoxFor(model => model.CountyId, new{ value = 840 })%> 

这将工作,但是,不为我在Asp.Net MVC 2的工作的价值仍然是空白文本框。我想确保这不是我遇到的一些随机错误。有没有其他人遇到同样的问题?我已经搜索并搜索了MVC 2中html helper的默认属性的更多信息,但我找不到任何东西。有没有人知道如何正确地将一个默认值分配给Asp.Net MVC 2中的文本框?

+2

我会用我的控制器,因为它填充视图模型执行此逻辑。 – Jaxidian 2010-04-22 21:30:10

回答

5

如果它是一个常数值,您可以将默认值分配给模型中的属性(可以将其设置在构造函数中,或者如果使用'旧式'属性,可以将其设置在后台字段中)。例如:

public class Model 
{ 
    public int CountryId { get; set; } 

    public Model() 
    { 
     this.CountryId = 840; 
    } 
} 

或者,如果它根据请求而变化,则将其设置在从控制器传递到视图的视图模型中。

+0

这是唯一的方法吗?我已经意识到像MaxLength这样的属性仍然可以像这样正确地工作<%= Html.TextBoxFor(model => model.CountryID,new {maxlength =“40”})%>。值刚刚被删除,或者这是现在在MVC 2中添加默认值的唯一方法? – Sara 2010-04-22 21:40:33

+0

我没有检查过,但是这似乎是最好的方法,因为它从视图中删除逻辑。 View的应该只显示数据,而不是设置它。但是,没有什么能阻止你使用旧式Html.TextBox助手,或者实际上是手动编写HTML。 – 2010-04-22 21:46:00

+0

当我想到它时,我知道它可以按照您所描述的方式完成,但我认为这可能是MVC 2中的一个错误。例如,您仍然可以使用新的{ whateverProperty = value}。它只是价值属性,似乎不工作。我认为这肯定是一个错误。如果你想添加一个默认属性来说“在这里输入文本”或类似的东西呢?这不是商业逻辑。必须有某种我错过的方式。我要去看MS Connect,看看这是一个错误还是有意的新行为。我会在这里发表他们的回应。 – Sara 2010-04-22 22:29:53

3

好的。我找到了我的问题的答案 - 有点。在MVC 2新Html.TextBoxFor不允许使用对象的值属性的设置htmlattributes即使它保留使用这个syntax-

<%= Html.TextBoxFor(model => model.CountryName, new { maxlength = "40" })%> 

所以要避开设置所有其他属性的能力这个问题,如果你需要设置一个文本框字段的默认值,则需要使用旧的语法 -

<%= Html.TextBox("CountryName", "Enter your country name")%> 

这将在HTML适当添加默认值属性。 在此实例中不能使用新的TextBoxFor规范,但该值仍将以与lambda表达式相同的方式返回给控制器。文本框的所有其他属性都可以使用textboxfor(maxlength等)使用新的{whateverProperty = value}语法来设置,而不是value属性。

9

事实上,如果任何人有这个问题,使用价值,而不是作品。我认为问题是与一个共同的v是一个c#关键字。

+0

这对我来说似乎是一个错误,允许通过并覆盖在视图模型属性上定义的值的封装Html属性。有趣的是知道它的工作原理! – 2010-06-09 22:07:16

1
@Html.TextBoxFor(model => model.CountyId, new{ @value = 840 }) 

作品在asp.net MVC3剃刀语法

相关问题