2013-02-22 63 views
2

我有要求使用Html.RenderAction就像你在ASP.NET MVC。ServiceStack剃刀 - Html.RenderAction等效

例如,我有一個新聞和產品的主頁上。

我想例如

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

這將啓動一個新的服務電話和輸出模板到HTML流做。

這可能使用ServiceStack剃刀,如果是的話,我該如何實現它?

+0

如果您能夠在'父'視圖中獲得精選產品,您可以嘗試像@ Html.RenderPage(「FeatureProducts。cshtml「,FeaturedProductsModel) – paaschpa 2013-02-22 17:28:01

+0

我意識到,然而,使用RenderAction的全部目的是讓您消除對產品的依賴關係。 – James 2013-02-22 17:31:46

回答

3

PartialExamples.cshtml測試頁面顯示渲染Razor視圖頁面內,例如不同的例子:

使用新RenderToAction()方法,它可以讓你執行一個服務,它的渲染與路線和查詢字符串,如局部視圖:

@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

+0

此附加功能現在滿足我的問題需求。 – James 2014-11-10 12:30:49

1

*我可以複製我的答案還是我失去了它在某種程度上

望着ServiceStack.Razor.ViewPage類有型ServiceStack.Html.HtmlHelper的html屬性。我沒有看到'RenderAction'作爲這個類的方法(或擴展方法),所以它看起來不可用。有一個'部分'方法需要ViewName和一個需要ViewName和一個對象的重載。根據您的上述評論,這似乎不是一個有用的解決方案。

如果我對上述內容正確,我認爲你需要你的'精選視圖模板'來提取數據。可以添加像

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

到您的模板。這將允許您像使用Model一樣使用產品變量。或者,使用JavaScript將數據拉入模板中。儘管如此,您將不得不使用JavaScript將數據存入HTML元素。

然後,您可以使用渲染@ Html.Partial( '精選')的模板

希望這有助於。