1

我已经有一年多没有做过 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,但也许我应该使用其他东西。有什么想法吗?谢谢。

4

2 回答 2

2

是的,你应该为这些使用助手。这将确保您生成的链接使用适当的路由,如果您对 URL 做任何花哨的事情或部署到非根路径(即/) ,这将使您的生活更加轻松

在您的情况下,最简单的解决方案是将 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 指出的那样,如果它现在有效,您可以随时开始遵循此建议,并在/如果您需要继续前进时重新审视您已经完成的工作。

于 2012-04-09T20:11:20.113 回答
1

这个答案不是独立的。我将其发布为我喜欢的 Michael Haren 答案的补充。

我想作为“想法”添加的另一件事是T4MVC。我是它的忠实粉丝,因为它可以帮助你摆脱@Url.Action@Html.Action. 例如,以 Michael 的示例代码为例:

<a href="@Url.Action("Index", "Interfaces")">
    ...

使用 T4MVC,您可以摆脱魔术字符串,并像这样呈现路由 URL:

<a href="@Url.Action(MVC.Interfaces.Index())">

然后,如果您重命名InterfacesController或重命名/更改Index()操作方法的签名,视图将无法编译,而不是在运行时获得 404

另一个很酷的事情是,您可以将参数传递给路由引擎,就好像您正在调用操作方法一样:

public ActionResult ById(int entityId) { ... } 

<a href="@Url.Action(MVC.Interfaces.Index(Model.EntityId))">
    ...

我不知道为什么更多的人不发布这个!

于 2012-04-09T20:31:28.920 回答