处理ASP.NET MVC“标签汤”

我今天正在研究一个ASP.NET MVC模板,在盯着所有那些荧光黄色%标签足够长时间之后,我基本上认定我已经受够了,所以我煞费苦心地修改了我的ascx文件,看起来像这样:

     1) { %>    pm.ShowForDisplay && !ViewData.TemplateInfo.Visited(pm))) { %>               

最后啊可读性。 唯一的问题是,需要长时间手动执行此操作。 我需要一种自动化方法。 某种代码格式化解决方案。 也许是宏或Visual Studio加载项或……? 你有什么建议?

更新

我现在计划从我的标记中重构大部分逻辑(参见Mike的答案),但与此同时,我想出了一种更易于管理的方法来格式化具有代码和HTML混合的ascx文件。 代码以这种方式更加分散,但是首先将这样的代码格式化起来要容易得多,并且使用它也更容易。

     1) { %>    pm.ShowForDisplay && !ViewData.TemplateInfo.Visited(pm))) { if (prop.HideSurroundingHtml) { %>   

我相信你的“标签汤”疼痛实际上是一个不同问题的症状:你感觉到它是因为你的观点中有逻辑。 视图应该非常轻量级,几乎没有逻辑。 您的逻辑应该在您的控制器中,它可以决定根据逻辑呈现不同的视图。 或者你可以将逻辑放入帮手。

请参阅Rob Conery的这篇文章

使用适当的视图模型(以及可选的,使用spark视图引擎),没有标签汤。

特别是,如果使用模板。

对这个例子说不出多少(更不用说 – 解决它),但对我来说 – 通常都是关于整洁感和正确构造事物的能力。


“我正在寻找代码格式化解决方案。” =>然后你必须检查火花。 即使它们确实包含逻辑,它也会“标记”您的视图。

你的例子(没有重组任何东西)=>

   ${nullText}   ${simpleDisplayText}     ${Html.Display(prop.PropertyName)}    ${prop.GetDisplayName()}   ${Html.Display(prop.ProperyName)}     

可能在某处错了,但你明白了。

对于我们当前的项目,我们通过编写HTML帮助程序来清理所有if-elses:

 public static void WriteIf(this HtmlHelper helper, bool condition, string truePart, string falsePart) { helper.ViewContext.HttpContext.Response.Write(condition ? truePart : falsePart); } 

然后在HTML中,你会说:

 <% Html.WriteIf(Model.IsTrue(), "TrueText", "FalseText"); %>