我有两个相同字段的模型:
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)
BindAttribute
的Prefix
属性从提交的表单值中剥离前缀,因此P1.Prop1
变成Prop
用于绑定