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

qporro 发布于 2019-03-09 c# 最后更新 2019-03-09 14:41 0 浏览

在MVC3上,是否有一种方法来装饰ViewModel属性,以便让DefaultModelBinder在请求中使用不同的名称? 例如,假设您有以下视图模型:

public class SomeModel 
{
  public string Direction {get;set;}
}
但是传入的参数是来自外部源的Dir(例如某些第三方组件)。 我知道一个自定义模型绑定器可以处理,但我认为必须有一种方法来装饰属性,类似于动作参数可以使用Bind(Prefix="...")的方式来定义该映射。
已邀请:

aet

赞同来自:

我能够使用FromForm属性在ASP.NET MVC Core中完成此任务。

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]

uqui

赞同来自:

您可以随时创建另一个属性:

public class SomeModel 
{
  public string Direction {get;set;}
  public string Dir
  {
    get { return this.Direction; }
    set { this.Direction = value; }
  }
}
我还要提到视图中使用的ViewModel(cshtml / vbhtml)不必与Post方法中使用的ViewModel相同。

aquia

赞同来自:

好的,所以经过更多的研究,看看类似的问题,并在这里看到反馈,似乎我的问题的答案基本上是“不”。 没有开箱即用的方式,因此必须使用自定义绑定器或者重命名属性。 可以在此处找到具有更详细答案的类似问题:How to bind URL parameters to model properties with different names