我需要像在 ASP.NET MVC 中一样使用 Html.RenderAction。
例如,我有一个主页,上面有新闻和产品。
例如,我想做
@Html.RenderAction("/api/products/featured")
这将启动一个新的服务调用并将模板输出到 html 流。
使用 ServiceStack Razor 是否可行,如果可以,我该如何完成?
我需要像在 ASP.NET MVC 中一样使用 Html.RenderAction。
例如,我有一个主页,上面有新闻和产品。
例如,我想做
@Html.RenderAction("/api/products/featured")
这将启动一个新的服务调用并将模板输出到 html 流。
使用 ServiceStack Razor 是否可行,如果可以,我该如何完成?
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
只是ResolveService
using 语句中等价物的包装,即:
@{
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+中添加的,现在可以在 MyGet 上使用。
*我可能会重复我的答案,或者我以某种方式丢失了它
查看 ServiceStack.Razor.ViewPage 类,有一个 ServiceStack.Html.HtmlHelper 类型的 Html 属性。我没有将“RenderAction”视为此类的方法(或扩展方法),因此它似乎不可用。有一个“部分”方法采用 ViewName 和一个采用 ViewName 和一个对象的重载。根据您的上述评论,这似乎不是一个有用的解决方案。
如果我对上述内容是正确的,我认为您需要您的“精选视图模板”来提取数据。可以添加类似的东西
{ FeaturedResponse products = new JsonServiceClient("http://localhost").Get<FeaturedResponse>("/api/products/featured"); }
到您的模板。这将允许您像模型一样使用 products 变量。
或者,使用 JavaScript 将数据拉入模板。但是,您必须使用 JavaScript 将数据放入 HTML 元素中。
然后,您可以使用 @Html.Partial('Featured') 呈现模板
希望这可以帮助。