在ViewModel属性上进行装饰,以使用不同的名称进行绑定

本文关键字:绑定 属性 ViewModel | 更新日期: 2023-09-27 18:08:36

在MVC3上,是否有一种方法来装饰ViewModel属性,以便让DefaultModelBinder在请求中使用不同的名称?

例如,假设您有以下视图模型:
public class SomeModel 
{
  public string Direction {get;set;}
}

但是传入的参数是Dir来自外部源(例如某些第三方组件)。

我知道自定义模型绑定器可以处理这个问题,但我认为必须有一种方法来修饰属性,类似于操作参数可以使用Bind(Prefix="...")来定义映射的方式。

在ViewModel属性上进行装饰,以使用不同的名称进行绑定

你可以再创建一个Property:

public class SomeModel 
{
  public string Direction {get;set;}
  public string Dir
  {
    get { return this.Direction; }
    set { this.Direction = value; }
  }
}

我还要提到的是,视图(cshtml/vbhtml)中使用的ViewModel不必与Post方法中使用的ViewModel相同。

好的,所以在对类似的问题进行了更多的研究并看到了这里的反馈之后,似乎我的问题的答案基本上是"NO"。

没有开箱即用的方法,因此必须使用自定义绑定,或者重命名属性。

一个类似的问题,更详细的答案可以在这里找到:如何将URL参数绑定到具有不同名称的模型属性

我能够在ASP中完成这一点。. NET MVC Core使用FromForm属性。

public class DataTableOrder
{
    public int Column { get; set; }
    [FromForm(Name = "Dir")]
    public string Direction { get; set; }
}

文档:https://docs.asp.net/en/latest/mvc/models/model-binding.html customize-model-binding-behavior-with-attributes

然而,如果你做一个GET或POST,你可能想使用[FromQuery]而不是[FromForm]我想。