我在一年多的时间里没有完成MVC2(或任何MVC),虽然这有效,但我想确保它是最好的方式。
我有一个“启动”页面,允许用户选择他们想要的工作;接口,事件,参数或任务。 HTML是:
<a href="/Interfaces/Index">
<div id="homeInterfaces" class="homeLinks">
<h1>Interfaces</h1>
<h2>Create, Edit or Delete Interfaces</h2>
</div>
</a>
<a href="/Tasks/Index">
<div id="homeTasks" class="homeLinks">
<h1>Tasks</h1>
<h2>Create, Edit or Delete Tasks</h2>
</div>
</a>
<a href="/Parameters/Index">
<div id="homeParameters" class="homeLinks">
<h1>Parameters</h1>
<h2>Create, Edit or Delete Parameters</h2>
</div>
</a>
<a href="/Events/Index">
<div id="homeEvents" class="homeLinks">
<h1>Events</h1>
<h2>Create, Edit or Delete Events</h2>
</div>
</a>
链接工作并转到相应的页面,但无论出于何种原因,我不确定这是否是正确的方法。我有每个控制器,适当的文件夹与每个的索引视图。我不认为我应该使用Html.ActionLink,但也许我还应该使用其他东西。有什么想法吗?感谢。
答案 0 :(得分:2)
是的,您应该使用帮助器。这将确保您生成的链接使用适当的路由,如果您对URL做任何想法或部署到非根路径(即/
)
在您的情况下,最简单的解决方案是将网址替换为@Url.Action
。我在Html.ActionLink
上使用它,因为Html.ActionLink
并不能让您轻松链接比简单文本更复杂的内容(例如您的HTML)。
<a href="@Url.Action("Index", "Interfaces")">
<div id="homeInterfaces" class="homeLinks">
<h1>Interfaces</h1>
<h2>Create, Edit or Delete Interfaces</h2>
</div>
</a>
如果您不使用Razor,请先切换到第一个。这是值得的。或者删除@
符号并添加一些<%= ... %>
。
正如@MichalFran所指出的那样,如果它现在正在工作,你可以随时开始关注这个建议,并重新审视你已经完成的事情/如果你需要在路上。
答案 1 :(得分:1)
这个答案不是独立的。我发布它作为Michael Haren's answer的补充,我喜欢。
我想添加为“思想”的另一件事是T4MVC。我是它的忠实粉丝,因为它可以帮助你摆脱@Url.Action
和@Html.Action
中更多的“神奇字符串”。例如,以Michael的示例代码为例:
<a href="@Url.Action("Index", "Interfaces")">
...
使用T4MVC,您可以摆脱魔术字符串,并像这样渲染路线网址:
<a href="@Url.Action(MVC.Interfaces.Index())">
然后,如果您重命名InterfacesController
或重命名/更改Index()
操作方法的签名,视图将无法编译而不是在运行时获取404
另一个很酷的事情是,您可以将参数传递给路由引擎,就像调用操作方法一样:
public ActionResult ById(int entityId) { ... }
<a href="@Url.Action(MVC.Interfaces.Index(Model.EntityId))">
...
我不知道为什么更多的人不会发布此事!