在MVC3上,是否有一种方法来装饰ViewModel属性,以便让DefaultModelBinder
在请求中使用不同的名称?
public class SomeModel
{
public string Direction {get;set;}
}
但是传入的参数是Dir来自外部源(例如某些第三方组件)。
我知道自定义模型绑定器可以处理这个问题,但我认为必须有一种方法来修饰属性,类似于操作参数可以使用Bind(Prefix="...")
来定义映射的方式。
你可以再创建一个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]
我想。