Ajax没有返回部分视图

时间:2013-06-21 18:56:29

标签: c# jquery asp.net-mvc razor

我真的有一组简单的代码来恢复一个由下拉列表触发的数据。

这是剧本:

function () {
   $('#ProviderID').change(function () {

    $.ajax({
        url: '/servicesDisplay/Index',
        type: 'Get',
        data: { id: $(this).attr('value') },
        success: function (result) {
            // The AJAX request succeeded and the result variable
            // will contain the partial HTML returned by the action
            // we inject it into the div:
            $('#serLocations').html(result);
        }
    });
}); 

这是控制器:

 public ActionResult Index(string id)
 {
     int prid = Int32.Parse(id.Substring(0, (id.Length-1))); 
     string mulitval = id.Substring((id.Length-1), 1).ToString();
     System.Data.Objects.ObjectResult<getProviderServiceAddress_Result> proList = theEntities.getProviderServiceAddress(prid);
     List<getProviderServiceAddress_Result> objList = proList.ToList();
     SelectList providerList = new SelectList(objList, "AddressID","Address1");
     //ViewBag.providerList = providerList;
     return PartialView("servicesDisplay/Index", providerList);
 }

这是观点:

@model OCS_CS.Models.servicesDisplay

  <div>
    @Html.DropDownList(model => model.ServiceAdderssID, (IEnumerable<SelectListItem>)model)
 </div>   

当下拉通过值时。应用确实击中了控制器。但它以浅红色高亮显示下降,视图从不显示。

3 个答案:

答案 0 :(得分:0)

你正在进行GET,没有意义将数据传递给ajax,你可以为POST传递数据:

首先,将值放在URL:

function () {
 $('#ProviderID').change(function () {

 $.ajax({
    url: '/servicesDisplay/Index/' + $(this).attr('value'),
    type: 'Get',
    success: function (result) {
        // The AJAX request succeeded and the result variable
        // will contain the partial HTML returned by the action
        // we inject it into the div:
        $('#serLocations').html(result);
    }
  });
});

其次,将方法标记为GET

 [HttpGet]
 public ActionResult Index(string id)

希望这能帮到你!

答案 1 :(得分:0)

试试这个使用jquery load方法的简短版本。

$(function(){

   $('#ProviderID').change(function () {
      $('#serLocations').load("@Url.Action("Index","ServicesDisplay")?id="
                                                              +$(this).val());   
    });

}); 

如果您想避免缓存结果,可以发送一个唯一的时间戳和查询字符串以避免缓存。

$('#serLocations').load("@Url.Action("Index","ServicesDisplay")?id="
                                                  +$(this).val()+"&t="+$.now()); 

答案 2 :(得分:0)

您的代码存在很多问题。首先,为您的视图定义的模型是:

@model OCS_CS.Models.servicesDisplay

但是在您的操作中,您通过传入SelectList来调用此视图:

SelectList providerList = new SelectList(objList, "AddressID","Address1");
return PartialView("servicesDisplay/Index", providerList);

这不会飞,因为模型与类型不匹配。秒问题是你将这个SelectList转换为IEnumerable。这也行不通。你需要转换为SelectList:

@Html.DropDownList(model => model.ServiceAdderssID, (SelectList)model)

但是再一次,直到您将动作中的模型类型与视图中的模型相匹配,这一切都无效。我建议你安装Fiddler来帮助你确定你得到了什么样的错误。