是否可以通过Controller方法以编程方式调用Razor编译器?

kmp*_*kmp 8 c# asp.net asp.net-mvc razor asp.net-mvc-3

我正在使用ASP .NET MVC 3,我有一个有趣的问题需要解决,我希望得到一些建议.

我有一个页面里面有很多div.每个div的内容随着时间的推移而变化,因此目前我为每个div运行一个计时器,它向服务器发出$ .ajax请求,返回带有div更新内容的PartialViewResult.局部视图非常复杂,并引用其他视图.

这种方法的问题在于它不能很好地扩展.可能是每个用户都有很多这样的计时器在运行,而且很多用户服务器都在不断受到攻击.因此,我宁愿向服务器发出一个请求,该请求可能返回多个div内容,因此它将是:

div1 { some html }
div2 { some html }
Run Code Online (Sandbox Code Playgroud)

...

然后在客户端上,我可以将每个HTML位置放在页面上的正确位置.

我认为我能做的就是从服务器返回JSON但我的问题是 - 如何获取HTML?目前剃刀编译器将运行并将我的部分视图cshtml文件转换为HTML但是如果我返回JSON,是否可以以编程方式调用razor编译器?

我在这里找到了Razor引擎:http://razorengine.codeplex.com/似乎做了我想要的但是可以用vanilla ASP NET MVC做到这一点吗?

或者,考虑到问题,有没有更好的方法可以实现我的目标?

谢谢你的帮助!

Stu*_*ser 5

创建一个Action,返回一个渲染所有这些PartialViews的新PartialView.例如一个动作:

public PartialViewResult AggregatedAction(args)
{
    return PartialView();
}
Run Code Online (Sandbox Code Playgroud)

视图包含:

@Html.Action("IndividualAction1", null)
@Html.Action("IndividualAction2", null)
@Html.Action("IndividualAction3", null)
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅http://haacked.com/archive/2009/11/18/aspnetmvc2-render-action.aspx.

这样只有一个请求,并且从正确的位置(即视图)调用渲染引擎.

然后使用结果,您可以搜索各种div并替换客户端中的html.

$('div#id1').html('div#id1',$(data));
$('div#id2').html('div#id2',$(data));
Run Code Online (Sandbox Code Playgroud)

如果您的页面结构允许,您应该使用:http://api.jquery.com/load/(如@Jorge所说)用一行替换所有的html.

$('div#targetDiv').load('Controller\AggregatedAction', anyData);
Run Code Online (Sandbox Code Playgroud)