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