好吧,这很奇怪。我无法在 ASP.NET MVC 上将 BindAttribute
的 Include
和 Exclude
属性与复杂类型嵌套对象一起使用。
这是我所做的:
型号:
public class FooViewModel {
public Enquiry Enquiry { get; set; }
}
public class Enquiry {
public int EnquiryId { get; set; }
public string Latitude { get; set; }
}
HTTP POST 操作:
[ActionName("Foo"), HttpPost]
public ActionResult Foo_post(
[Bind(Include = "Enquiry.EnquiryId")]
FooViewModel foo) {
return View(foo);
}
查看:
@using (Html.BeginForm()) {
@Html.TextBoxFor(m => m.Enquiry.EnquiryId)
@Html.TextBoxFor(m => m.Enquiry.Latitude)
<input type="submit" value="push" />
}
根本不起作用。仅当我为 Enquiry
类定义 BindAttribute
时,才能实现此功能,如下所述:
How do I use the [Bind(Include="")] attribute on complex nested objects?
最佳答案
是的,你可以让它像这样工作:
[Bind(Include = "EnquiryId")]
public class Enquiry
{
public int EnquiryId { get; set; }
public string Latitude { get; set; }
}
以及你的行动:
[ActionName("Foo"), HttpPost]
public ActionResult Foo_post(FooViewModel foo)
{
return View(foo);
}
这将仅在绑定(bind)中包含 EnquiryId
,并将 Latitude
保留为空。
话虽如此,我不建议您使用 Bind 属性。我的建议是使用 View 模型。在这些 View 模型中,您只包含对该特定 View 有意义的属性。
因此只需重新调整您的 View 模型即可:
public class FooViewModel
{
public EnquiryViewModel Enquiry { get; set; }
}
public class EnquiryViewModel
{
public int EnquiryId { get; set; }
}
给你。不再需要担心绑定(bind)。
关于asp.net-mvc - 复杂类型嵌套对象的绑定(bind)属性包含和排除属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8892550/