http://www.codinghorror.com/blog/2008/07/web-development-as-tag-soup.html
我找不到答案.我觉得拿标签汤是不可避免的.是的,我知道MVC分离了模型和控制器,但是当你看到这一切,一切都变得可怕.我可以读取发布的HTML,就像标签汤一样好或更好.
我不会使用单元测试,所以这不是一个重要的优势.我不知道我怎么能避免一个丑陋的观点,现在关于我如何得到它枯燥的mvc或只是发布html.
我使用所有奇怪的编码(而且是代码),比使用response.write“< table>”更容易维护视图.
例如:Dealing with ASP.NET MVC “tag soup”
Arnis的答案(对他或任何其他人没有任何的攻击),修正了这个问题中的可怕代码,但对我来说,看起来还不错,至少不是我期望的.对我来说,这些尖括号可能也是<%%>或<?PHP?>.
我喜欢像codeigniter这样的东西,它真的是我看到的最干净的,但它仍然不是我期望的.我想我希望有一些魔术存在于MVC中,使得一切都变得美丽.显然,除非真的真的很小心,否则与传统的asp相比,没有什么好处,因为它与视图相关.
这主要是关于这个观点.不是哪种语言对于什么或谁的模板引擎是最大的(他们都具有相同的标记混合倾向)更好.
相信我.我想让MVC和我的共同开发人员一起工作,所以我并没有把它视为一个典范.我不能让他们同意一些事情,只因为每个人都在做这样的事情.
感谢任何意见.我必须能够证明这些东西,而在理解MVC和我所得到的东西的同时,这个观点使得很多事情似乎是浪费时间.
编辑:一切似乎都面向特定的框架而不是计划.我看到一些洞察力,但最终似乎除了纪律之外,没有办法.感谢大家的答案.
解决方法
>剃刀是避免标签汤的一个明显的方法,因为不需要任何<%和%>标签 – 简单的一个@在你的代码和视图引擎之前,C#结束和HTML开始的地方.
<span class="name">@Model.Name</span>
甚至循环和if语句仍然看起来性感的.cshtml文件与Razor和魔术@字符.
@if(shouldDisplayDiv) { <div id="mydiv">Div is displayed!</div> } @foreach(User user in Model.Friends) { <a href="@user.Url"><img src="@user.ImageUrl" title="@user.Name" /></a> }
默认情况下,剃刀还会为您处理HTML编码,因此您的视图不会充满Html.Encode调用. (注意:如果需要输出HTML,可以使用Html.Raw帮助器方法).
将逻辑放入控制器将理想地消除视图中对大型代码块的需求.尝试让模型对象包含视图的所有动态数据,与视图中显示的动态数据完全相同.目的在于您的视图中没有任何C#代码(无意义,但如果是目标,请查看您可以接近多少)!
>部分视图可以很好地分离您的视图的不同部分(但是尽量不要太多使用它们).您还可以将不同的模型对象传递给每个部分视图,我发现它可以方便地使用一些大的循环,或者类似于flair的一些.
> HTML助手也很有用(谢谢subkamran).这里有一个与上述部分视图类似的概念,但HtmlHelpers稍微不同,因为您指定了方法的参数(及其类型),而不是可以传递单个Model对象的部分视图.这是一个good example of how to implement them.再次,这些可以看起来很整洁你的csHTML代码.
<div class="specialdiv">@Html.SomeMethod(Model,"String",5)</div>
>客户端MVC是另一种选择,如果您正在开发AJAX重的Web应用程序,则有强烈的建议.遵循控制器中的逻辑,您将使用客户端MVC框架(如Backbone.js)以整洁的方式对HTML进行模板化,并使用jQuery .ajax()与控制器进行通话.分离您的表现层是一个很好的做法,留下一些美丽的视图标记!
我坚持这些小指导,它对我而言就像一个魅力.很好,干净的HTML标记与偶尔的@字符.很容易维护(至少视图是!).
编辑:请注意,所有这些要点都包含在ASP.NET MVC 3中,并且都是微软所关心的所有“最佳实践”.没有必要安装任何额外的框架,插件或插件来遵守这些准则.