Asp.net mvc 在ASP.NET MVC 4中发送HTML块作为参数

Asp.net mvc 在ASP.NET MVC 4中发送HTML块作为参数,asp.net-mvc,razor,html-helper,Asp.net Mvc,Razor,Html Helper,我已经为ASP.NETMVC4编写了一个分页中继器。它有一个render方法,该方法接受要呈现的页眉、页脚、正文和分隔符部分的参数,如下所示(为了可读性,简化了很多): public IHtmlString呈现(Func页眉、Func正文、Func页脚) { var sb=新的StringBuilder(); //要呈现的代码,包括调用参数对象,如下所示: sb.Append(头(null)); foreach(项目中的var项目) 某人附加(正文(项目)); sb.Append(页脚(null

我已经为ASP.NETMVC4编写了一个分页中继器。它有一个render方法,该方法接受要呈现的页眉、页脚、正文和分隔符部分的参数,如下所示(为了可读性,简化了很多):

public IHtmlString呈现(Func页眉、Func正文、Func页脚)
{
var sb=新的StringBuilder();
//要呈现的代码,包括调用参数对象,如下所示:
sb.Append(头(null));
foreach(项目中的var项目)
某人附加(正文(项目));
sb.Append(页脚(null));
返回新的HtmlString(sb.ToString());
}
现在,我想在Razor模板中使用此方法,并将实际模板部分作为参数。这对于这样的场景非常有用,我要么只使用纯lambda表达式,要么使用oneliner作为模板:

@Model.Render(body:
    item => Html.Partial("InvoiceListView", item)
, separator:
    @<hr />
)
@Model.Render(主体:
item=>Html.Partial(“InvoiceListView”,item)
,分隔符:
@
)
然而,如果我想做一些更复杂的事情,比如构造一个表并填充它,我就无法让Razor意识到我想将这些多行模板作为参数发送

我想也许这会奏效:

@Model.Render(body: item => 
    @<text>
        <tr>
            <td>
                @item.ArticleNr
            </td>
        </tr>
    </text>
);
@Model.Render(主体:项=>
@
@项目.ArticleNr
);

但是那里没有运气。有人有什么建议吗?或者我是不是运气不好——在Razor中写这样的重复字是不可能的?

你可以看看这篇文章:

希望有帮助

编辑:

您可以使用一些包装器,而不是直接使用lambda表达式

@helper Foo(object item)
{
    <tr>
        ...
    </tr>
}

@Model.Render(body: Foo)
@helper Foo(对象项)
{
...
}
@Model.Render(主体:Foo)

事实上,是的,这确实有帮助,我很惊讶它有帮助,因为我认为我已经尝试了所有可能的构造变体。我的主要问题似乎是在尝试使用命名参数时出现的。我不知道这是因为我需要更改参数的模板定义,还是因为它完全不兼容。但是,如果我不使用命名参数,而只使用位置参数,我可以通过在模板前面加上@字符(和上面的示例中一样,没有)来包含模板。谢谢你!
@helper Foo(object item)
{
    <tr>
        ...
    </tr>
}

@Model.Render(body: Foo)