处理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"); %>