在asp.net razor中是否有类似于Eval()的函数?

时间:2012-07-27 10:29:50

标签: asp.net-mvc razor runtime eval

在Razor视图中,我是否可以通过这种方式做到这一点:

<h1>Normal razor code</h2>
@Html.Action("NormalRazorCode")

@Eval(" @Html.Action(\"RuntimeEval\") ")

基本上是运行时的文本到剃刀编译器(例如,它不像RazorEngine那样创建一个全新的视图)。

2 个答案:

答案 0 :(得分:0)

我认为您可以假设视图在编译时存在,并在运行时创建实际文件,这样ViewEngine将以默认方式工作

基本上你可以创建一个Html.Eval帮助器来创建.cshtml文件,然后使用Html.ActionHtml.Partial

渲染它

答案 1 :(得分:0)

我想做类似的事情;我将模型数据(在我的控制下)存储在数据库中,如果能够在那些包含在页面中的字符串中包含HTML帮助器,那么它将简化我的工作。

主要动机是让我重用现有的局部视图。

没有eval函数,但是您可以轻松编写一个扩展方法,该方法将评估您选择预先允许的方法。就我而言,我想评估对@Html.Partial()的调用。这里的示例非常简单-专门用于@Html.Partial("somePartialView")调用,并将其替换为实际的局部调用:

    public static IHtmlString ExpandHtmlString(
        this HtmlHelper htmlHelper,
        String html)
    {
        if (String.IsNullOrEmpty(html))
            return new HtmlString(html);

        const String IDENTIFY_PARTIAL = @"@Html.Partial\(""([a-zA-Z0-9\-_]*)""\)";

        var partialFinder = new Regex(IDENTIFY_PARTIAL);
        var matches = partialFinder.Matches(html);

        foreach (Match m in matches) {
            var matchedStr = m.Value;
            var viewName = m.Groups[1].Value;
            var partial = htmlHelper.Partial(viewName);

            html = html.Replace(matchedStr, partial.ToHtmlString());
        }

        return new HtmlString(html);
    }

您从Razor页面上这样调用它:

@Html.ExpandHtmlString((String)Model.SomeStringField)

您可以轻松地对此进行扩展,以评估您预先决定要接受的一组方法或运算符。