Asp.net-Mvc

將屬性包含和排除屬性與復雜類型的嵌套對象

  • September 6, 2019

好吧,這很奇怪。我不能在 ASP.NET MVC 上使用具有復雜類型嵌套對象BindAttribute的 ’sInclude和屬性。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" />
}

根本不起作用。如果我按照此處所述定義BindAttributeforEnquiry類,我只能使這項工作:

我如何使用$$ Bind(Include="") $$複雜嵌套對象的屬性?

是的,你可以讓它像這樣工作:

[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);
}

這將僅包括EnquiryId綁定中的 並保留為Latitude空。

話雖如此,我不建議您使用 Bind 屬性。我的建議是使用視圖模型。在這些視圖模型中,您只包含對這個特定視圖有意義的屬性。

因此,只需重新調整您的視圖模型:

public class FooViewModel 
{
   public EnquiryViewModel Enquiry { get; set; }
}

public class EnquiryViewModel 
{
   public int EnquiryId { get; set; }
}

你去吧。不再需要擔心綁定。

引用自:https://stackoverflow.com/questions/8892550