与HTML.Raw的MVC @helper错误

时间:2015-02-17 23:51:47

标签: asp.net-mvc razor

我在Razor Helper文件中有以下代码

@helper MakeNoteBlank(string content)
{
    string msg = "";

    if(content == null)
    {
        msg = " ";
    }
    else
    {
        msg = content;
    }

    <div class="note">
        <p>
             @Html.Raw(msg)
        </p>
    </div>
}

使用@ Html.Raw(..)语句执行时代码失败,说明了这一点 &#34;对象引用未设置为对象的实例。&#34;

如果我删除@ Html.Raw(..)并输出&#39; msg&#39;直接然后没有问题。

我做错了什么?

2 个答案:

答案 0 :(得分:3)

使用@(new HtmlString())代替@ Html.Raw()

答案 1 :(得分:0)

我能想到的最好的方法可能是为HtmlHelper创建一个扩展方法。您需要创建一个像这样的类:

using System.Web;
using System.Web.Mvc;

namespace MyApplication.Extensions
{
    public static class HtmlHelperExtension
    {
        public static IHtmlString DisplayMessage<T>(this HtmlHelper<T> htmlHelper, string content)
        {
            return htmlHelper.Raw($@"
                <div class=""note"">
                  <p>
                     {content ?? "&nbsp;"}
                  </p>
                </div>
            ");
        }
    }
}

然后在您的cshtml文件中,只需像这样使用它即可:

@using MyApplication.Extensions;

@Html.DisplayMessage("Your content here")

希望这会有所帮助。