在Razor视图中,我是否可以通过这种方式做到这一点:
<h1>Normal razor code</h2>
@Html.Action("NormalRazorCode")
@Eval(" @Html.Action(\"RuntimeEval\") ")
基本上是运行时的文本到剃刀编译器(例如,它不像RazorEngine那样创建一个全新的视图)。
答案 0 :(得分:0)
我认为您可以假设视图在编译时存在,并在运行时创建实际文件,这样ViewEngine将以默认方式工作
基本上你可以创建一个Html.Eval
帮助器来创建.cshtml文件,然后使用Html.Action
或Html.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)
您可以轻松地对此进行扩展,以评估您预先决定要接受的一组方法或运算符。