Asp.net mvc 4 dropdownlist更改时不渲染局部视图
我有一个下拉列表,当选择一个值时,应该显示一个呈现相关数据的局部视图。我已经做了几天了,因为我是新来的,似乎无法让它工作。帮助任何人 索引 控制器Asp.net mvc 4 dropdownlist更改时不渲染局部视图,asp.net-mvc-4,razor,asp.net-mvc-partialview,cascadingdropdown,Asp.net Mvc 4,Razor,Asp.net Mvc Partialview,Cascadingdropdown,我有一个下拉列表,当选择一个值时,应该显示一个呈现相关数据的局部视图。我已经做了几天了,因为我是新来的,似乎无法让它工作。帮助任何人 索引 控制器 public ActionResult Index() { ViewBag.ddl = new SelectList(db.X_VesselMaster.OrderBy(x => x.Vessel_Name), "Vessel_ID", "Vessel_Name"); return View(); } [HttpGet]
public ActionResult Index()
{
ViewBag.ddl = new SelectList(db.X_VesselMaster.OrderBy(x => x.Vessel_Name), "Vessel_ID", "Vessel_Name");
return View();
}
[HttpGet]
public ActionResult GetVessel(int y)
{
var viewModel = new VoyageData();
viewModel.VesselMasters = db.X_VesselMaster.Where(i => i.Vessel_ID == (y)).Include(i =>
i.X_Vessel_Transaction_Header).ToList();
if (y != null)
{
viewModel.Vessel_Transaction_Headers = viewModel.VesselMasters.Single(i => i.Vessel_ID ==
(y)).X_Vessel_Transaction_Header.Where(c => c.Deleted <= 0).ToList();
}
return PartialView("_Voyages", viewModel);
}
局部视图
@model ......
<table>
<thead>
<tr><th>Vessel ID</th></tr>
<tr>
<th>Arrived</th>
</tr>
</thead>
@foreach (var m in Model.Vessel_Transaction_Headers)
{
<tr><td>@m.Vessel_ID</td></tr>
<tr>
<td>@m.Arrived</td>
</tr>
}
</table>
您必须更改javascript,以便它提交您创建的表单。使用jquery查找它如果它是唯一的一个,只需使用$form=$'form'即可找到它。如果有多个id,您可以在Ajax.beginnform helper的atributes参数中为它指定一个id,并使用该id查找它,如$form=$'theFormId'。一旦通过jQuery将其选中,只需打开表单DOM对象,并调用其提交方法,如下所示:$fomr[0].submit 一旦发生这种情况,低调的ajax助手将负责在表单中发布数据,并更新VMResults id内容 问题是您混淆了两种技术:纯ajax、ASP.NET ajax帮助程序和不引人注目的帮助程序 如果您想简单地使用jqueryajax,那么根本不需要表单。只需在更改事件处理程序中执行以下操作:
$("#ddlvm").change(function () {
var vId = $("#ddlvm").val();
jQuery.get('@(Url.Action("GetVessel","VM",null, Request.Url.Scheme))?vId=' + vId);
}).done(function(html) {
$('#VMResults').html(html);
});
});
请注意,您需要进行ajax调用get,然后等待响应,这在.done函数中完成。当浏览器从服务器获得响应时,将调用done回调,并将服务器响应作为参数传递,这是您期望的答案
简单地说:使用ASP.NETMVCAJAX助手或者使用纯jQuery和JavaScriptAJAX。至少,您现在应该知道您混淆了两种不同的东西。在控制器中,您期望一个名为y的参数,但您发送了一个参数?vId=
$("#ddlvm").change(function () {
var vId = $("#ddlvm").val();
jQuery.get('@(Url.Action("GetVessel","VM",null, Request.Url.Scheme))?vId=' + vId);
}).done(function(html) {
$('#VMResults').html(html);
});
});