asp.net-mvc – 如何避免使用MVC的标签汤?

我正在阅读这个我的追求,以证明MVC对非mvc像常规老PHP(不使用MVC,即使经典的asp可以使用,虽然痛苦):

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和我所得到的东西的同时,这个观点使得很多事情似乎是浪费时间.

编辑:一切似乎都面向特定的框架而不是计划.我看到一些洞察力,但最终似乎除了纪律之外,没有办法.感谢大家的答案.

解决方法

看看使用MVC 3中包含的 Razor视图引擎.还要尽量把所有的逻辑保存在Controller类中,并根据View中显示内容构建一个Model.

>剃刀是避免标签汤的一个明显的方法,因为不需要任何<%和%>标签 – 简单的一个@在你的代码和视图引擎之前,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中,并且都是微软所关心的所有“最佳实践”.没有必要安装任何额外的框架,插件插件来遵守这些准则.

相关文章

项目要求通过网站上传大文件,比如视频文件,通过摸索实现了文件分片来上传,然后后台进行合并。 使用了...
安装新版本的Nginx(vim /etc/yum.repos.d/nginx.repo) [nginx-stable] name=nginx stable repo baseu...
什么是 SignalR&#160;ASP.NET Core ASP.NET Core SignalR 是一种开放源代码库,可简化将实时 web 功...
在Windows下使用Docker,我们选择Docker Desktop这个软件,非常方便。 ## Docker Desktop介绍及安装 Do...
项目开始设计的是运行在windows下,所以一开始采用的是windows服务模式来获取多媒体文件信息,后来要求...
银河麒麟高级服务器操作系统V10是针对企业级关键业务,适应虚拟化、云计算、大数据、工业互联网时代对主...