我的代码好像有点错误。但我找不到。
所以,我从Ajax函数调用控制器中的一个动作。
var serviceURL = '/Vm/GetVMInformation';
$.ajax({
type:"GET",
url: serviceURL,
contentType:"application/json; charset=utf-8",
dataType:"json",
success: function (result) {
alert("This Works fine");
$("#testDiv").html(result); // Display the partial View in this div
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
});
然后,我的操作返回一个局部视图和一个列表对象。
public ActionResult GetVMInformation()
{
List VMListArray = new List();
... Code ...
return PartialView("_List", VmList);
}
该操作将被调用,部分视图将工作。我测试了它。所以问题是,我的Ajax函数不成功。所以它抛出了一个错误。当我警告错误时,我只得到"内部服务器错误"。
有人看到我的错误吗?
注:我的部分观点。不确定它是否重要
@model IsolutionsAzureManager.Models.VmData
@Model.Name[0]
更新:
所以我把函数的返回类型(现在是jsonresult类型)改为json
JavaScriptSerializer jss = new JavaScriptSerializer();
string output = jss.Serialize(VmList);
Response.Write(output);
Response.Flush();
Response.End();
return Json("_List", output);
好消息是:Ajax调用现在成功了。坏消息是:我仍然无法显示我的部分视图。返回值(结果)只是[对象,对象]
success: function (result) {
$("#testDiv").html(result);
},
如果您得到一个500错误在您的应用程序中是错误的。
如果您得到一个JS错误,可能是因为您的JS期望返回JSON,但是由于您返回一个部分视图,返回的内容是HTML。控制器操作应将列表转换为JSON对象,操作返回类型应为JSONResult。或者更改JS中的预期结果类型。
*更新
您看到"对象"是因为您只是将JSONJECT抛出到HTML中。要正确显示它,需要使用对象。因为它是一个序列化的列表,所以需要对它进行迭代,对每个条目做一些事情。像这样的东西
for (var i = 0; i < result.length; i++) {
alert(result[i].name);
}
其中".name"是您的VmInfo类中的某个字段。
所以我更新了我的问题。显示局部视图时仍有问题
我更新了我的答案以反映你的进步。
内部服务器错误意味着您的服务器抛出异常并响应500 HTTP状态。您需要调试GetVMInformation操作,请参阅原因。
GetVMInformation()似乎工作得很好。我没有任何期望