MVC2 HTML链接 - 这是正确的,还是有更好的方法?

时间:2012-04-09 20:05:38

标签: c# asp.net-mvc-2 hyperlink

我在一年多的时间里没有完成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,但也许我还应该使用其他东西。有什么想法吗?感谢。

2 个答案:

答案 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))">
    ...

我不知道为什么更多的人不会发布此事!