ASP.NET MVC模型绑定与表单元素名称中的虚线

Jam*_*ker 12 c# model-view-controller asp.net-mvc model-binding

我一直在搜索互联网,试图找到一种方法来容纳我的表单元素中的破折号,以及MVC 2,3或甚至4中ASP.NET控件的默认模型绑定行为.

作为前端开发人员,我更喜欢使用CSS中的破折号而不是camelCase或下划线.在我的标记中,我希望能够做到的是这样的:

<input type="text" name="first-name" class="required" />
<input type="text" name="last-name" class="required" />
Run Code Online (Sandbox Code Playgroud)

在控制器中,我将传入一个C#对象,如下所示:

public class Person
{
      public string FirstName { get; set; }
      public string LastName { get; set; }
      //etc...
}
Run Code Online (Sandbox Code Playgroud)

有没有办法Controller通过一些正则表达式或其他行为来扩展类以适应这种情况?我讨厌我必须做这样的事情:

<input type="text" name="person.firstname" class="required" />
Run Code Online (Sandbox Code Playgroud)

甚至这个:

<input type="text" name="isPersonAttending" class="required" />
Run Code Online (Sandbox Code Playgroud)

思考?

Pab*_*meo 7

您始终可以创建自己的模型绑定器.

这是一个实现支持向模型属性添加别名的绑定器的示例:

http://ole.michelsen.dk/blog/bind-a-model-property-to-a-different-named-query-string-field/

并通过它执行以下操作:

[ModelBinder(typeof(AliasModelBinder))]
public class Person
{
      [BindAlias("first-name")]
      public string FirstName { get; set; }
      [BindAlias("last-name")]
      public string LastName { get; set; }
      //etc...
}
Run Code Online (Sandbox Code Playgroud)

编辑: 正如博客所说,这个实现基于Andras对以下SO问题的回答: Asp.Net MVC 2 - 将模型的属性绑定到不同的命名值

  • 请注意,正如博客作者所说,这是我自己的答案的副本:http://stackoverflow.com/questions/4316301/asp-net-mvc-2-bind-a-models -property-to-a-different-named-value#answer-4316327 (3认同)