使用EditorFor / TextBoxFor / TextBox助手在名称中使用短划线的自定义属性

时间:2011-06-29 19:02:40

标签: asp.net-mvc-3 razor custom-attributes

我使用Knockout-JS将视图中的属性绑定到我的视图模型。 Knockout-JS使用一个名为'data-bind'的自定义属性,您必须将该属性附加到您希望绑定到其中以查看模型对象的控件。

示例:

<input type='text' name='first-name' data-bind='value: firstName'/>

注意'data-bind'属性。

在我的视图渲染中,我无法渲染具有此属性的文本框。我知道Html.EditorFor,Html.TextBoxFor和Html.TextBox助手都带有一个匿名对象,您可以使用它来指定自定义属性。这个实现的唯一问题是C#不允许破折号作为变量名,所以这不会编译:     @ Html.EditorFor(m =&gt; m.FirstName,new {data-bind =“value:firstName”});

我唯一能想到的就是这个(在视图模型中):

public class DataBindingInput
{
     public string Value { get; set; }
     public string DataBindingAttributes { get; set }
}

public class MyViewModel
{
    ...
    public DataBindingValue firstName { get; set; }
    ....
}

一个名为“DataBindingInput.cshtml”的视图模板:

@model DataBindingInput
<input type='text' data-binding='@Model.DataBindingAttributes' value='@Model.Value'>

唯一的问题是我丢失了输入名称的自动生成,因此它不能用于回发,因为模型绑定器不知道如何绑定它。

我该如何做到这一点?

1 个答案:

答案 0 :(得分:28)

感谢上面的Crescent Fish,看起来您可以使用下划线,而MVC 3会将它们转换为破折号,因为HTML属性名称中不允许使用下划线。