@ Html.Raw等效于MVC6

时间:2016-06-15 12:05:03

标签: c# asp.net .net asp.net-mvc asp.net-core

我有几个复制粘贴的控件。我想避免它,所以我将所有HTML生成逻辑移动到静态助手类中。但是当我使用它时,我的HTML会在引号中转义,但我希望以原始HTML显示它。这是两个问题:

  1. 我无法扩展控制器本身,我只能从视图中进行扩展。
  2. 我不能使用标签帮助器,因为其中一个参数属于委托类型,所以它不能传递给标签助手类(据我所知)。
  3. 我目前的用例是:

    <div class="panel-body panel-body-table">
        @(WuiHelper<int>.RenderIntegerInput(Model.Config, x => x.PatchSize, "sourceObserver_patchSize", "Patch Size", 1, 1000000))
    </div>
    

    但正如我所说,它在引号中转义了html,因此它呈现为纯文本(方法的返回类型为string)。 似乎删除了@Html辅助类。我目前的web.config是:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <system.webServer>
        <handlers>
          <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
        </handlers>
        <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
      </system.webServer>
    </configuration>
    

    以下是截图:引用了所有名称空间,但缺少@Htmlenter image description here

1 个答案:

答案 0 :(得分:0)

使用IHtmlContent代替string作为方法的返回值,并将字符串包装在HtmlEncodedString中解决。 整个签名工作:

public static IHtmlContent RenderIntegerInput<T>(CustomizableConfig<T> model, Func<T, TParam> func, string id, string name, int minValue, int maxValue)
{
   //...
   string oldStringResult = ... // generating HTML
   return new HtmlEncodedString(oldStringResult);
}