2011-09-08 50 views
2

场景: 我的应用程序必须提出请求(AJAX)并基于请求多个div(这些div是PartialViews)必须在客户端进行更新。如果单独制作,div或partialviews可能会很昂贵。执行多个返回一个ActionResult

想法: 当一个请求完成后,JS将收集部分视图的列表,以使用任何参数进行更新并发送AJAX请求。控制器接收请求并使用TP库并行执行所有局部视图,收集渲染的标记,并将响应发送回客户端,客户端绘制页面中的部分视图/ div。

挑战: 在服务器接收到带有参数的部分视图列表后。我如何在Action Method中执行部分视图(从客户端传递的名称)并获得它们的标记/ json响应?

在此先感谢。

回答

3

从这个问题,使用代码来获取的HtmlHelper:
Using HtmlHelper in a Controller

public static HtmlHelper GetHtmlHelper(this Controller controller) 
{ 
    var viewContext = new ViewContext(controller.ControllerContext, new FakeView(), controller.ViewData, controller.TempData, TextWriter.Null); 
    return new HtmlHelper(viewContext, new ViewPage()); 
} 

public class FakeView : IView 
{ 
    public void Render(ViewContext viewContext, TextWriter writer) 
    { 
     throw new InvalidOperationException(); 
    } 
} 

然后在您的控制器的操作方法:

var helper = GetHtmlHelper(this); 
var html1 = helper.Partial("PartialView1"); 
var html2 = helper.Partial("PartialView2"); 

然后返回HTML片段的任何格式,方便您。

+0

谢谢Xavier。我试过你的建议,但是,Intellisense并没有显示“部分”方法的“帮手”。并且,带有“this”参数的“GetHtmlHelper”显示为错误。思考? – Pakora

+0

您需要在文件顶部添加'using System.Web.Mvc.Html;'。关于第二个错误,您将GetHtmlHelper()方法放在哪里?什么是错误?如果你将它添加到你的控制器,那么它应该工作。如果你把它放在一个静态类中,你将需要预先指定该类的名称。 –

+0

谢谢Xavier。它在添加使用后工作。 – Pakora

相关问题