ServiceStack Razor - Html.RenderAction等效

时间:2013-02-22 16:11:49

标签: asp.net-mvc razor servicestack

我需要像在ASP.NET MVC中一样使用Html.RenderAction。

例如,我有一个主页上有新闻和产品。

我想做的事情

@Html.RenderAction("/api/products/featured")

哪个会启动新的服务调用并将模板输出到html流。

这是否可以使用ServiceStack Razor,如果可以,我该如何实现呢?

2 个答案:

答案 0 :(得分:3)

PartialExamples.cshtml测试页面显示了在页面内呈现剃刀视图的不同示例,例如:

使用允许您执行服务的新RenderToAction()方法及其使用路由和QueryString呈现的部分视图,例如:

@Html.RenderAction("/products/1")

如果您想要一个与默认视图不同的视图,这也会采用可选的视图名称:

@Html.RenderAction("/products/1", "CustomProductView")

还有正常Html.Partial()来指定您要在页面中呈现的视图和模型,例如:

@Html.Partial("GetProduct", 
    base.ExecuteService<ProductService>(s => s.Any(new GetProduct { Id = 1 })))

ExecuteService只是using语句中等效ResolveService的包装器,即:

@{
   Response response = null;
   using (var service = base.ResolveService<ProductService>())
   {
       response = service.Any(new GetProduct { Id = 1 });
   }
}
@Html.Partial("GetProduct", response)

Razor Views中的新RenderToAction()方法已添加到 v4.0.34 + ,现在为available on MyGet

答案 1 :(得分:1)

*我可能会复制我的答案,或者我以某种方式丢失了

查看ServiceStack.Razor.ViewPage类,有一个类型为ServiceStack.Html.HtmlHelper的Html属性。我没有在这个类上看到'RenderAction'作为方法(或扩展方法),因此它似乎不可用。有一个'Partial'方法,它接受ViewName和一个带ViewName和一个对象的重载。根据您的上述评论,这似乎不是一个有用的解决方案。

如果我对上述内容不对,我认为您需要使用“特色视图模板”来提取数据。可以添加像

这样的东西
    { FeaturedResponse products = new JsonServiceClient("http://localhost").Get<FeaturedResponse>("/api/products/featured"); }

到你的模板。这将允许您像模型一样使用products变量。

或者,使用JavaScript将数据提取到模板中。但是,您必须使用JavaScript将数据导入HTML元素。

然后,您可以使用@ Html.Partial('Featured')

渲染模板

希望这有帮助。