我正在尝试在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输出。
但是,我不想包装代码括号,我想了解如何提供更清晰的界面。
我有什么想法可以提供这个吗?
答案 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();
}