Ajax未返回部分视图

本文关键字:视图 返回部 Ajax | 更新日期: 2023-09-27 18:19:37

我实际上有一组简单的代码来带回一组由下拉菜单触发的数据。

这是脚本:

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>   

当下拉框通过值中的时。应用程序确实击中了控制器。但它会以浅红色高亮显示下拉菜单,并且视图永远不会显示。

Ajax未返回部分视图

试试这个使用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()); 

您正在执行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)

希望这能帮助你!

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

@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来帮助你确定你会遇到什么样的错误。