不能定义在MVC定制呈现拉姆达 [英] Can't define a custom renderer lambda in MVC
问题描述
我要定义一个自定义呈现在我的MVC视图拉姆达,我可以用它在部分多次渲染同样的事情。我打算将其存储在视图中的数据。到目前为止,我已经创造了这个扩展方法来存储渲染:
公共静态类HtmlHelperExtensions
{
公共静态无效DefineRenderer<&的TModel GT;(这与的HtmlHelper LT;的TModel> HTML,串rendererName,动作渲染器)
{
html.ViewData [_渲染+ rendererName] =渲染器;
}
}
我想在我看来来定义渲染器,但它不工作;我想我的语法是关闭的。可能有人告诉我,我在做什么错在这里?我只是希望它渲染所谓当测试段落:
@ Html.DefineRenderer(AnalysisTableHeader,()=> {
&所述p为H.;试验段&下; / P>
@});
通过一些灵感来自@ mariozski的评论,我设法得到我想要工作的行为。我用的是 @helper
作为渲染器。我传递给局部模型包含辅助呈现,即的结果。一个 HelperResult
。所以它看起来是这样的:
公共类AnalysisResponseTableViewModel {
公共HelperResult HeaderTypeRowRenderer {搞定;组; }
公开名单< AnalysisUserResponseViewModel>回应{搞定;组; }
}
然后调用视图调用部分是这样的:
@helper RenderHeaderTypeRow(){
&所述; TR类=headerTypeRow>
< TD>头型排< / TD>
< TD>去此处< / TD>
< / TR>
}@ Html.Partial(AnalysisResponseTableContentsPartial
新AnalysisResponseTableViewModel {
响应= Model.OverallCaseStudyUserResponses,
HeaderTypeRowRenderer = RenderHeaderTypeRow()
}
)
和最后部分本身可以呈现头类型行多次这样的:
@ Html.Raw(Model.HeaderTypeRowRenderer.ToHtmlString())
@ {布尔reachedSummaryRows = FALSE;}
@foreach(在Model.Responses VAR响应){
如果(reachedSummaryRows&安培;!&安培;!response.IsPass.HasValue){
reachedSummaryRows = TRUE;
@:@ Html.Raw(Model.HeaderTypeRowRenderer.ToHtmlString())
} //其他表在这里行
}
I want to define a custom renderer as a lambda in my MVC view that I can use it in a partial to render the same thing multiple times. I plan to store it in the view data. So far I have created this extension method to store the renderer:
public static class HtmlHelperExtensions
{
public static void DefineRenderer<TModel>(this HtmlHelper<TModel> html, string rendererName, Action renderer)
{
html.ViewData["_Renderer" + rendererName] = renderer;
}
}
I'm trying to define the renderer in my view, but it isn't working; I assume my syntax is off. Could somebody tell me what I'm doing wrong here? I just want it to render the test paragraph when called:
@Html.DefineRenderer("AnalysisTableHeader", () => {
<p>test paragraph</p>
@});
With some inspiration from @mariozski's comment, I managed to get the behaviour I wanted to work. I use a @helper
as the renderer. The model I pass to the partial contains the result of the helper render, ie. a HelperResult
. So it looks like this:
public class AnalysisResponseTableViewModel {
public HelperResult HeaderTypeRowRenderer { get; set; }
public List<AnalysisUserResponseViewModel> Responses { get; set; }
}
Then, the calling view calls the partial like this:
@helper RenderHeaderTypeRow() {
<tr class="headerTypeRow">
<td>Header type row</td>
<td>Goes here</td>
</tr>
}
@Html.Partial("AnalysisResponseTableContentsPartial",
new AnalysisResponseTableViewModel {
Responses = Model.OverallCaseStudyUserResponses,
HeaderTypeRowRenderer = RenderHeaderTypeRow()
}
)
And finally the partial itself can render the 'header type row' multiple times like this:
@Html.Raw(Model.HeaderTypeRowRenderer.ToHtmlString())
@{bool reachedSummaryRows = false;}
@foreach (var response in Model.Responses) {
if (!reachedSummaryRows && !response.IsPass.HasValue) {
reachedSummaryRows = true;
@:@Html.Raw(Model.HeaderTypeRowRenderer.ToHtmlString())
}
// other table rows here
}
这篇关于不能定义在MVC定制呈现拉姆达的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!