如何在 asp.net 核心 3.1(或更高版本)MVC 中的控制器 post 操作中绑定复杂模型中的数据?
How do you bind data in a complex model in a controller post action in asp.net core 3.1 (or above) MVC?
如何在 asp.net 核心 3.1(或更高版本)MVC 中的控制器 post 操作中绑定复杂模型中的数据?
这只是一个示例模型,但要点是没有展平,也没有单独的视图模型。
给出这样的示例模型:
public class Business
{
public int Id {get; set;}
public string Name {get; set;}
public string WebAddress {get; set;}
public ContactDetails ContactInfo {get; set;}
public Address AddressInfo {get; set;}
}
public class ContactDetails
{
public string TelNo {get; set;}
public string Mobile {get; set;}
}
public class Address
{
public string BuildingNo {get; set;}
public string Street {get; set;}
public string City {get; set;}
public string Postcode {get; set;}
}
所有单独的属性都显示在视图中。
您如何将其具体绑定到控制器上的 post 方法?
如何绑定复杂的属性?
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Create([Bind("Name,WebAddress")] DeliCakeBiz deliCakeBiz) <--- ???
{
}
如果你想绑定诸如“Id”、“Name”、“WebAddress”之类的属性,你可以直接使用[Bind("Id ,Name , WebAddress")]
,但是如果你想绑定一些特定的嵌套模型的属性,你可以添加[Bind("")]
在 class.
例如,如果我想绑定 Name
和 Street
属性,我可以使用此代码:
控制器
[HttpPost]
public async Task<ActionResult> ComplexModel([Bind("AddressInfo,Name")] Business bus)
{
//.......
return View();
}
地址模型
[Bind("Street")]
public class Address
{
public string BuildingNo { get; set; }
public string Street { get; set; }
public string City { get; set; }
public string Postcode { get; set; }
}
查看
<form asp-action="ComplexModel">
<div class="form-group">
<label asp-for="Id"></label>
<input type="text" asp-for="Id" />
</div>
<div class="form-group">
<label asp-for="Name "></label>
<input type="text" asp-for="Name " />
</div>
<div class="form-group">
<label asp-for="WebAddress "></label>
<input type="text" asp-for="WebAddress " />
</div>
<div class="form-group">
<label asp-for="ContactInfo.TelNo"></label>
<input type="text" asp-for="ContactInfo.TelNo" />
</div>
<div class="form-group">
<label asp-for="ContactInfo.Mobile "></label>
<input type="text" asp-for="ContactInfo.Mobile " />
</div>
<div class="form-group">
<label asp-for="AddressInfo.BuildingNo"></label>
<input type="text" asp-for="AddressInfo.BuildingNo" />
</div>
<div class="form-group">
<label asp-for="AddressInfo.Street"></label>
<input type="text" asp-for="AddressInfo.Street" />
</div>
<div class="form-group">
<label asp-for="AddressInfo.City"></label>
<input type="text" asp-for="AddressInfo.City " />
</div>
<div class="form-group">
<label asp-for="AddressInfo.Postcode"></label>
<input type="text" asp-for="AddressInfo.Postcode" />
</div>
<button type="submit">submit</button>
</form>
当我提交表单时,我只是绑定 Street
和 Name
属性
如何在 asp.net 核心 3.1(或更高版本)MVC 中的控制器 post 操作中绑定复杂模型中的数据?
这只是一个示例模型,但要点是没有展平,也没有单独的视图模型。
给出这样的示例模型:
public class Business
{
public int Id {get; set;}
public string Name {get; set;}
public string WebAddress {get; set;}
public ContactDetails ContactInfo {get; set;}
public Address AddressInfo {get; set;}
}
public class ContactDetails
{
public string TelNo {get; set;}
public string Mobile {get; set;}
}
public class Address
{
public string BuildingNo {get; set;}
public string Street {get; set;}
public string City {get; set;}
public string Postcode {get; set;}
}
所有单独的属性都显示在视图中。
您如何将其具体绑定到控制器上的 post 方法?
如何绑定复杂的属性?
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Create([Bind("Name,WebAddress")] DeliCakeBiz deliCakeBiz) <--- ???
{
}
如果你想绑定诸如“Id”、“Name”、“WebAddress”之类的属性,你可以直接使用[Bind("Id ,Name , WebAddress")]
,但是如果你想绑定一些特定的嵌套模型的属性,你可以添加[Bind("")]
在 class.
例如,如果我想绑定 Name
和 Street
属性,我可以使用此代码:
控制器
[HttpPost]
public async Task<ActionResult> ComplexModel([Bind("AddressInfo,Name")] Business bus)
{
//.......
return View();
}
地址模型
[Bind("Street")]
public class Address
{
public string BuildingNo { get; set; }
public string Street { get; set; }
public string City { get; set; }
public string Postcode { get; set; }
}
查看
<form asp-action="ComplexModel">
<div class="form-group">
<label asp-for="Id"></label>
<input type="text" asp-for="Id" />
</div>
<div class="form-group">
<label asp-for="Name "></label>
<input type="text" asp-for="Name " />
</div>
<div class="form-group">
<label asp-for="WebAddress "></label>
<input type="text" asp-for="WebAddress " />
</div>
<div class="form-group">
<label asp-for="ContactInfo.TelNo"></label>
<input type="text" asp-for="ContactInfo.TelNo" />
</div>
<div class="form-group">
<label asp-for="ContactInfo.Mobile "></label>
<input type="text" asp-for="ContactInfo.Mobile " />
</div>
<div class="form-group">
<label asp-for="AddressInfo.BuildingNo"></label>
<input type="text" asp-for="AddressInfo.BuildingNo" />
</div>
<div class="form-group">
<label asp-for="AddressInfo.Street"></label>
<input type="text" asp-for="AddressInfo.Street" />
</div>
<div class="form-group">
<label asp-for="AddressInfo.City"></label>
<input type="text" asp-for="AddressInfo.City " />
</div>
<div class="form-group">
<label asp-for="AddressInfo.Postcode"></label>
<input type="text" asp-for="AddressInfo.Postcode" />
</div>
<button type="submit">submit</button>
</form>
当我提交表单时,我只是绑定 Street
和 Name
属性