如何重写属性绑定名称



我有两个相同字段的模型:

class Model1 
{
    int Prop1 { get; set; }
    int Prop2 { get; set; }
}
class Model2
{
    int Prop1 { get; set; }
    int Prop2 { get; set; }
}

和主模型:

class MainModel
{
    Model1 P1 { get; set; }
    Model2 P2 { get; set; }
}

我想为MainModel创建View,但不知道绑定数据是什么。

放入视图:

@Html.EditorFor(model => model.P1.Prop1 ... ) // first editor Prop1, for P1
@Html.EditorFor(model => model.P2.Prop1 ... ) // second editor Prop1, for P2

但控制器动作只能从第一个Prop1编辑器获取值,对于model1和model2,对于model2的值必须从第二个编辑器获取;行动:

ActionResult Create([Bind(Include = "Prop1, Prop2")] Model1 model1,[Bind(Include = "Prop1, Prop2")] Model2 model2)
{
}

model2。Prop1的值为model1。

有匹配名称的正确绑定字段是什么?

您可以使用MainModel作为动作参数:

ActionResult Create(MainModel model)
{
}

或者您可以将参数名称与您的主类属性名称相匹配:

ActionResult Create(Model1 p1, Model2 p2)
{
}

model2。Prop1的值为model1。Prop1值。不,不是。

没有任何东西被绑定,因为你的属性名与你在视图中生成的不匹配。您的所有属性值都将是0 (int的默认值)

你的方法需要是

public ActionResult Create(MainModel model)

public ActionResult Create([Bind(Prefix = "P1")]Model1 model1, [Bind(Prefix = "P2")]Model2 model2)

BindAttributePrefix属性从提交的表单值中剥离前缀,因此P1.Prop1变成Prop用于绑定

最新更新