我和一位同事正在讨论如何在页面上生成链接。我们应该使用html助手还是在视图中保持非常简单的视图逻辑?
对于这个项目,我们使用Castle Monorail和NVelocity视图引擎。如果有人考虑下面的两个选项并发表意见,我将不胜感激。
在这个故事中,该链接目前仅用于一个页面。
选项1 - 使用助手
帮助代码
var action = snail.IsActive ? "ConfirmDeactivate" : "ConfirmActivate";
var routeValues = new Dictionary<string, string>
{
{"action", action},
{"querystring", "id=" + snail.ID}
};
var href = UrlHelper.For(routeValues);
var link = new XElement("a");
link.SetAttributeValue("href", href);
link.SetValue(action.Substring(7));
return link.ToString();
然后在视图中,我们只是像这样调用帮助器:
<li>$Html.SnailActivationSwitchLink($item)</li>
选项2 - 视图中的全部
#if($snail.IsActive)
<a href="$Url.For("%{action='ConfirmDeactivate', querystring='id=$snail.ID'}")">Deactivate</a>
#else
<a href="$Url.For("%{action='ConfirmActivate', querystring='id=$snail.ID'}")">Activate</a>
#end
答案 0 :(得分:1)
对我来说,我更喜欢选项1.在助手上做逻辑更方便,更优雅。
答案 1 :(得分:1)
我强烈建议/使用选项1 - 无论您正在开发的观看次数是多少
答案 2 :(得分:1)
当时对选项1的大量支持 - 时间扮演魔鬼的拥护者!
应用DRY等概念的主要原因之一是使应用程序更易于更改/更易于维护。所以:
如果链接中的文字需要稍后更改,该怎么办?或者我想在那里放一张图片而不是文字?我是否真的想重建应用程序以删除链接中的拼写错误?
更糟糕的是,如果链接文本在不同的页面上需要不同,该怎么办?然后我为每个页面添加另一个帮助方法吗?
这是假设我正在做出改变。如果我让我的标记专家更改图像的链接,或者将一个类添加到一个元素来设置它,该怎么办?他非常乐意编辑视图文件,但如果他看到帮助程序调用,他就不知道HTML的来源和更改位置。即使他找到了帮助类,他也知道如何改变C#代码来做他需要的东西吗?他所要做的就是改变一些文字!为什么它必须如此困难?
我可以通过在帮助器上添加两个方法参数,并为每个链接传入文本来缓解上述一些问题,但是如果文本是图像标记怎么办?我现在已经得到了我需要在我的助手调用中逃脱的HTML - 这看起来很混乱。我仍然无法编辑链接元素的属性,我是否应该添加参数/参数?它在哪里停止?
本质上,我认为我可以向大多数人展示选项2,他们会理解它并能够修改它。很好的纯HTML,有一些易于遵循的条件逻辑。选项1增加了我不需要的复杂性和abstration。