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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (42)

我正在使用Knockout-JS将视图中的属性绑定到我的视图模型。Knockout-JS使用名为'data-bind'的自定义属性,我必须将其添加到要绑定到其中以查看模型对象的控件。

例:

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

注意'数据绑定'属性。

在我的视图渲染中,我无法渲染具有此属性的文本框。我知道Html.EditorFor,Html.TextBoxFor和Html.TextBox都采用可以用来指定自定义属性的匿名对象。这个实现的唯一问题是C#不允许破折号作为变量名,所以这将不能编译:@ Html.EditorFor(m => 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'>

唯一的问题是我失去了输入名称的自动生成,所以它不能在回发模式下工作,因为模型绑定器不知道如何绑定。

提问于
用户回答回答于

你可以使用下划线,MVC 3会将它们转换为破折号,因为下划线在HTML属性名称中是不允许的。

扫码关注云+社区