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>
当下拉框通过值中的时。应用程序确实击中了控制器。但它会以浅红色高亮显示下拉菜单,并且视图永远不会显示。
试试这个使用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来帮助你确定你会遇到什么样的错误。