如何通过AJAX渲染局部视图?

RPM*_*984 4 c# ajax asp.net-mvc jquery asp.net-mvc-2

对于MVC专家来说,这应该相对简单,但我仍在学习绳索.

  • 我有一个不是强类型的视图,简单ViewPage<dynamic>.
  • 在这个视图中,我有一个文本框,使用jQuery的AutoComplete进行扩展
  • 当用户在文本框中键入内容时,AutoComplete会对Controller进行AJAX调用,Controller调用存储过程,返回JSON记录集合,包含2个属性:
    • ID(项目的标识符)
    • 名称(项目名称)

现在,使用jQuery AutoComplete UI插件,当用户单击自动完成中显示的项目之一时,将调用客户端事件,并传递JSON对象:

// .. snip heaps of jQuery
select: function (event, ui) {
   // ui is a JSON object:
   //    ui.item.id
   //    ui.item.name
}
Run Code Online (Sandbox Code Playgroud)

现在我的问题是 - 从这个客户端事件,我需要在同一页面上(在texbox下面)显示有关此项目的扩展信息.(显然需要对服务器进行另一次AJAX调用).

我怎样才能做到这一点?我唯一能想到的就是让jQuery调用另一个返回单个控制器的控制器JsonResult,然后手动解析这个JSON,显示我想要的HTML.

这是唯一的方法吗?我可以使用帮手吗?我的View不是强类型的原因是因为当页面加载时,没有显示关于模型的信息,只是文本框.

我真的希望我可以创建一个强类型的局部视图,并以某种方式在这个局部视图上调用RenderPartial,传递我想要显示的项目的id.这可能来自客户端/ AJAX吗?

aut*_*gic 13

您可以使用jQuery从控制器请求html和Json.所以你的jQuery看起来像这样:

$.get(action, null, function(data){
  $('#someDiv').html(data);
}, 'html');
Run Code Online (Sandbox Code Playgroud)

并且您的控制器可以返回:

return PartialView("SomePartial", Model)
Run Code Online (Sandbox Code Playgroud)

并且html将呈现在屏幕上

  • 还有一件事我应该指出 - IE将倾向于缓存$ .get ajax请求,所以如果你有部分变化很多,使用$ .post(相同的语法)来克服这个限制 (3认同)