Asp.net mvc asp.net mvc中父子关系视图的通用方法
显示父实体(DropDownFor/ListBoxFor)及其子实体(razor foreach)的技术方法是什么 我是否应该创建一个Index.cshtml,其中包含父级和子级的razor代码 只是一个旁注:我将EF与ViewModels一起使用,当检索到客户时,孩子们并不急于加载。我在选择客户时显式加载订单Asp.net mvc asp.net mvc中父子关系视图的通用方法,asp.net-mvc,Asp.net Mvc,显示父实体(DropDownFor/ListBoxFor)及其子实体(razor foreach)的技术方法是什么 我是否应该创建一个Index.cshtml,其中包含父级和子级的razor代码 只是一个旁注:我将EF与ViewModels一起使用,当检索到客户时,孩子们并不急于加载。我在选择客户时显式加载订单 我找不到关于正确方法的任何教程或信息,似乎没有人用Razor做这件事?一种方法是:在DDL的更改事件上,使用JSON加载数据 $('#CustomerDDL').change(func
我找不到关于正确方法的任何教程或信息,似乎没有人用Razor做这件事?一种方法是:在DDL的更改事件上,使用
JSON
加载数据
$('#CustomerDDL').change(function (e) {
url = '@Url.Action("GetCustomerDetails", "Customer")';
var data = { id: this.value };
$.post(url, data, function (result) {
if (result.success) {
var detailsList = result.detailsList;
var table = "<table>";
for (var i = 0; i < detailsList.length; i++)
{
table += "<tr>" +
"<td> detailsList[i].invoice_number + "</td>" +
"<td> detailsList[i].quantity + "</td>" +
//etc...
"</tr>";
}
table += "</table>";
}
else {
var table = "<table> no data </table>";
}
$('#DivForShowDetails').html(table);
});
});
编辑:
你可以这样用另一种方法。主视图,例如Index.cshtml
包含以下内容:
@using (Ajax.BeginForm("GetDetails", "Customer", new AjaxOptions { UpdateTargetId = "getDetailsResult" }, new { id = "customersForm" }))
{
@Html.DropDownList("Customer", ViewBag.Customers as IEnumerable<SelectListItem>, new { @onchange="CustomerChanged(this.value);" })
<input type="hidden" id="hiddencustomer" name="customerId" />
<noscript>
//this button will not shown
<input type="submit" value="" />
</noscript>
}
//results will shown here after form submit.
<div class="detailsSection" id="getDetailsResult">
@Html.Partial("Selected_Customer_Details", Model)
</div>
<script>
function CustomerChanged(cId)
{
//take selected customer
$('#hiddencustomer').val(cId);
//submit form
$('#customersForm').submit();
}
</script>
在控制器中,您有一个索引
操作,其中包含客户列表:
public ActionResult Index()
{
ViewBag.Customers = new SelectList(_ServiceOrRepo.LoadCustomers(), "Id", "Name");
return View();
}
和GetDetails
操作返回Selected\u Customer\u Details.cshtml
部分视图:
public ActionResult GetDetails(int id)
{
DetailsModel model = _ServiceOrRepo.LoadCustomerDetailsById(id);
return PartialView("Selected_Customer_Details", model);
}
我认为GetCustomerDetails操作返回的结果应该是部分结果,以避免javascript中的html构造。如果您确实希望返回json数据,然后在浏览器上构建标记,那么js模板引擎将是一种更干净的方法。我同意返回带有剃刀订单模板的PartialView,这只是一种方式。我们也可以使用Ajax.BeginForm()并在部分视图中显示结果。无论我们是否也这样认为,您能否展示您上一个建议的更多代码?
public ActionResult Index()
{
ViewBag.Customers = new SelectList(_ServiceOrRepo.LoadCustomers(), "Id", "Name");
return View();
}
public ActionResult GetDetails(int id)
{
DetailsModel model = _ServiceOrRepo.LoadCustomerDetailsById(id);
return PartialView("Selected_Customer_Details", model);
}