有很多关于ASP.NET MVC的 View-engines 的讨论以及对内联<!>“tag-soup <!>的批评。与for循环和类似的东西。

替代或补充是使用HTML帮助程序,它只是内联方法调用。

当我查看ASP.NET MVC的HTML帮助程序时,他们正在使用一个名为 TagBuilder 的类。

我的建议是使用LINQ to XML获得强类型和正确格式化(X)HTML

XDocument output = new XDocument();
XElement root = new XElement("div",
    new XAttribute("class", "root_item"));

XElement iconImage = new XElement("img",
    new XAttribute("src", ResolveUrl("~/image.gif")),
    new XAttribute("alt", "This is an image"));

XElement link = new XElement("a",
    new XAttribute("class", "link"),
    new XAttribute("href", "http://google.com"),
    new XText("Link to Google"));


root.Add(link);
root.Add(iconImage);
output.Add(root);

我喜欢它,因为它类似于WebForms中的强类型控件,您可以在其中新建一个Button并将其添加到另一个控件的Control集合中。

这有什么明显的问题或限制吗?

有帮助吗?

解决方案

我可以想到上述方法的两个问题。 首先,

XElement iconImage = new XElement("img",
new XAttribute("src", ResolveUrl("~/image.gif")),
new XAttribute("alt", "This is an image"));

参考上面的内容,我们可以有类似的内容:

<img src=<%=whatever%> alt=<%=whatever%> />

这可能是个人判断或者是什么,但我当然会投票给后者更多<!>“人类<!>”;可读。是的,使用LINQ 2 XML可能会摆脱奇怪的<!> lt;%}%<!> gt;在我的aspx页面中闲逛,但与此同时,你制作那些<!>“好男孩<!>”;看起来很笨拙。

第二个可能会出现性能问题。我认为解析和执行LINQ 2 XML可能会非常慢,尽管我没有任何关于此的数据。

就我个人而言,我仍在试验MVC框架,感觉就像回到ASP或PHP 3.X这样的旧时代,因为几乎所有的交互式部分都是明确处理的,而不是面向窗口/ GUI-OOP的ASP Dot Net框架。我认为我将使用MVC的主要原因是它可以保证最优质的客户端HTML代码..

其他提示

这是一个好主意!我看到的唯一问题是使用C#。 ;)VB.NET通过它的XML文字功能提供了更好的XML支持。

您在问题中列出的代码可以在VB.NET中以这样的方式编写。 (添加了文本 <!>;这是一个链接<!>“; ,因为您的示例在a元素中不包含任何文本。)

Dim root = <div class="root_item">
               <img src=<%= ResolveUrl("~/image.gif") %> alt="This is an image"/>
               <a class="link" href="http://google.com">This is a link</a>
           </div>

仍有<%= ... %>标签,但会在编译时检查它们的有效性。如果此代码是返回类型XElement的函数的返回值,则该Xhtml代码段可以在站点的其他位置重用。

我在CodePlex上有一个项目,它使用VB.NET XML Literals作为自定义ASP.NET MVC视图引擎,在 http: //vbmvc.codeplex.com 。它基于代码 Dmitry Robsman ,他是Microsoft的ASP.NET产品部经理。视图是VB.NET类,母版页是基类。您 new-up 部分视图类,而不是通过名称字符串引用它们,因此这也是一个额外的编译时间检查。而不是返回字符串的HtmlHelper类,有一个XhtmlHelper类,它返回XElement并且与你提议的类似。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top