lambda函数是否可以包含Razor语法并在View中执行?

haf*_*rje 5 c# asp.net-mvc lambda razor

是否可以使用Razor语法定义lambda表达式(delegate,Action,Func <>)的内容,以便在视图中执行此模型方法时,它将插入Razor内容?

这样做的目的是让我们的开发人员能够定义他们自己的自定义内容,以便插入CustomControl视图中的特定点.

以下是模拟我当前布局的精简示例代码.焦点的特定部分是RenderSideContent方法定义及其执行调用.

Index.cshtml

@model My.PageModel

@My.CustomControl(new CustomControlModel
    {
        AreaTitle = "Details",
        RenderSideContent = () =>
        {
            <div>
                @using (My.CustomWrapper("General"))
                {
                    My.BasicControl(Model.Controls[0])
                }
            </div>
        }
    })
Run Code Online (Sandbox Code Playgroud)

CustomControl.cshtml

<div>
    @Model.AreaTitle
    <div class="my-custom-content">
        @Model.RenderSideContent()
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

Chr*_*att 3

是和不是。不,您不能像这样向它提供自定义 Razor,因为在这种情况下,您正在处理直接的 C#,而类似的东西<div>不是有效的 C#。但是,您可以在 lambda 中构建一个IHtmlStringor对象,然后返回该对象MvcHtmlString

但是,您将需要创建返回HTML 与呈现HTML 的自定义控件版本。基本上,想想Html.Partialvs Html.RenderPartial。前者实际上写入响应,而后者仅返回一个MvcHtmlString可以随意呈现到页面的响应。