如何渲染()而不是ToString()

时间:2011-02-08 12:38:59

标签: c# asp.net-mvc-3 html-helper

我正在尝试在MVC3中编译自己的一组控件。因此,我认为我不会为所有这些扩展器创建HTML Helper扩展,而是模仿其他框架的行为(Telerik,DevExpress)。所以我创建了一个新的帮助扩展来提供我的Item类;

 public static IFriendlyComponentFactory Factory(this HtmlHelper helper)
        {
            return new FriendlyComponentFactory(helper.ViewContext);
        }

然后,从这里我提出我的对象,以便我可以设置属性等。

如果我把@ Html.Factory()。Grid()。Name(“Test”)

然后我得到;

MyTest.Extensions.Grid

我理解的是ToString()行为。所以,我将ToString更改为输出;

new MvcHtmlString("<h3>Test</h3>").ToString()

好的,我将HTML完全编码,所以我在页面中看到了我的标签。嗯。

我可以在Telerik源代码中看到(我正试图自己解决这个问题)他们正在处理ToString()并且似乎在输出HTML,但我可以看到工作在渲染中完成输出到ViewContext Writer,而不是ToString()的输出。

最后,我试过了;

@{ Html.Factory().Grid().Render( ); }

我直接写了ViewContext.Writer。 Tada,我得到了HTML输出。

但是,我不想包装代码括号,我想了解如何提供更清晰的界面。

我有什么想法可以提供这个吗?

2 个答案:

答案 0 :(得分:1)

为您的类实现IHtmlString接口。但请注意,直接写入输出更快,因此请记住大型控件。

答案 1 :(得分:1)

覆盖隐式强制转换为字符串并返回Render:

public static implicit operator string(MyTest.Extensions.Grid g)
{
    return g.Render();
}

或覆盖ToString():

public string ToString()
{
    return g.Render();
}