问题陈述:查看无法加载ajax成功方法。
描述: 我有几个下拉级联(基于第一个值的第二个绑定)。 在更改第一个下拉列表时,我绑定了第二个下拉列表,再次更改了第二个下拉列表,现在在右侧,我想根据两个下拉值显示一个记录列表。
为此,我在下拉列表2的onchange事件中使用以下JS代码:
function ShowDocsList() {
var teamId = $('#TeamID').val();
var projectId = $("#ProjectID").val();
var Url = "@Url.Content("~/DocsHome/DocsList")";
$.ajax({
url: Url,
type:'POST',
dataType: 'html',
data: { TeamID: teamId ,ProjectID : projectId},
success: function (data) {
return data;
$('.docs-detail').html(data);
}
});
在这里,在DocsHome控制器中,DocsList方法在第二个下拉列表的更改中受到影响,这是项目下拉列表。但是视图没有被渲染。以下是我的控制器代码:
public ActionResult DocsList(int teamId, int projectId)
{
List<CustomerViewModel> customerViewsModels = SmartAdminHelper.GetCustomers(db1);
if (Request.IsAjaxRequest())
return PartialView("DocsList");
else
return View("DocsList");
}
同样,我在List中获取记录但是在调试时它没有传递到DocsList视图,据我说这是正确的。
这里DocsList是我想要渲染的视图,作为第二个下拉列表更改的部分视图。 根据我的知识,虽然调试它返回点返回PartialView(“DocsList”),然后再次回到ajax成功方法,最后我发现我做错了。
早些时候我让Json获取数据但是在这里我从ajax调用action方法。因此,不确定这也可能是一个问题,因为我是新手。
我做错了什么,到底在哪里?
答案 0 :(得分:0)
我喜欢将呈现的局部视图作为HTML字符串传递回客户端。我使用一种方法来执行此操作,该方法保存在每个控制器继承的控制器基类中。要使用该方法,您需要引用System.Web.Mvc和System.IO名称空间。
方法如下:
private string RenderViewToString( string viewName, object model ) {
ViewData.Model = model;
using ( var sw = new StringWriter() ) {
var viewResult = ViewEngines.Engines.FindPartialView( ControllerContext, viewName );
var viewContext = new ViewContext( ControllerContext, viewResult.View, ViewData, TempData, sw );
viewResult.View.Render( viewContext, sw );
viewResult.ViewEngine.ReleaseView( ControllerContext, viewResult.View );
return sw.GetStringBuilder().ToString();
}
}
将模型和视图名称传递给方法,它将呈现的视图HTML作为字符串返回,您可以将其作为ContentResult返回给客户端。
更新您的操作方法,如下所示:
public ActionResult DocsList(int teamId, int projectId)
{
List<CustomerViewModel> customerViewsModels = SmartAdminHelper.GetCustomers(db1);
if (Request.IsAjaxRequest())
var viewContents = RenderViewToString("DocsList", customerViewsModels);
return Content(viewContents);
else
return View("DocsList");
}
假设您希望渲染视图出现的元素上有css类'.docs-detail',那么您将开始营业。希望这有帮助!