如何正确地将字符串传递给Razor?

时间:2015-11-30 16:00:44

标签: asp.net-mvc razor

我想在静态类ChardinHtml.DataIntro(字符串消息)中创建一个简单的函数。该函数应该呈现类似data-intro ='my message'的内容,我想以这种方式使用它:

<div @ChardinHtml.DataIntro("These are your site's settings")/>

(输出为<div data-intro="These are your site's settings"/>

我到底应该归还什么? 是字符串/编码字符串/ MvcHtmlString / MvcHtmlString里面有编码字符串吗?我该怎么做才能保护自己免受消息中的(')(撇号)等字符的影响?

代码如下所示:

public static string DataIntro(string msg)
{           
    string str = string.Format("data-intro='{0}'", msg);
    return str;
}

1 个答案:

答案 0 :(得分:0)

您可以创建一个HTML帮助器方法来渲染它。您可以返回MvcHtmlString作为输出。在使用之前使用HttpUtility.HtmlEncode对字符串进行编码

public static class MyCustomFancyHtmlExtensions
{
    public static MvcHtmlString MyFancyAttr(this HtmlHelper helper, string msg)
    {
        msg =  HttpUtility.HtmlEncode(msg);
        return new MvcHtmlString(string.Format("data-intro ='{0}'", msg));
    }
}

您可以使用using语句在剃刀视图中包含命名空间后调用它

@usint YourNamespaceWhereYouDefinedTheMethod

<div class="test" @Html.MyFancyAttr("test'ing")> test</div>

虽然这回答了你的问题,但我不确定你的用例是什么,但是我的建议是直接在剃刀视图中编写数据属性,除非你在决定什么时需要一些复杂的逻辑/何时渲染。