1

ASP.NET MVC 1.0 / C#を使用して、クライアント用のヘルプデスクチケットシステムを構築しています。StevenSandersonの「ASP.NETMVCのアプリ領域、Take 2」を実装しましたが、うまく機能しています。

Globabl.asaxページには、次のように定義されたルートがいくつかあります。

public static void RegisterRoutes(RouteCollection routes)
{
    // Routing config for the HelpDesk area
    routes.CreateArea("HelpDesk", "ProjectName.Areas.HelpDesk.Controllers",
        routes.MapRoute(null, "HelpDesk/{controller}/{action}", new { controller = "Ticket", action = "Index" }),
        routes.MapRoute(null, "HelpDesk/Ticket/Details/{TicketId}", new { controller = "Ticket", action = "Details", TicketId = "TicketId" })
    );
}

したがって、ブラウザのアドレスバーに「 http:// localhost / HelpDesk / Ticket / Details / 12 」と手動で入力すると、期待どおりの結果が得られます。これが私のコントローラーです:

public ActionResult Details(int TicketId)
{
    hd_Ticket ticket = ticketRepository.GetTicket(TicketId);
    if (ticket == null)
        return View("NotFound");
    else
        return View(ticket);
}

私の見解では:

<%= Html.ActionLink(item.Subject, "Details", new { item.TicketId } )%>

ただし、そのコードは「http:// localhost / HelpDesk / Ticket / Details?TicketId = 12」を生成し、これも期待される結果を返します。私の質問は...

スティーブンサンダーソンのエリアを使用して、「 http:// localhost / HelpDesk / Ticket / Details / 12 」のようなクリーンなURLを作成するActionLinkを定義するにはどうすればよいですか?

4

3 に答える 3

4

試す

<%= Html.ActionLink(item.Subject, "Details", new { TicketId = item.TicketId } )%>

ActionLinkメソッドは、パラメーター名と一致するキーを持つディクショナリを想定しています。(匿名オブジェクトを渡すことはこれに便利であることに注意してください)。それ以外は、URLの末尾にタグを付けるだけだと思います。

編集: これが機能しない理由は、最初のルートが一致して優先されるためです(コントローラーとアクション)が、TicketIdパラメーターを定義していません。ルートの順序を切り替える必要があります。常に最も具体的なルートを最初に配置する必要があります。

于 2009-08-14T19:53:50.320 に答える
1

試す

<%= Html.ActionLink(item.Subject, "Details", new { TicketId=item.TicketId } )%>
于 2009-08-14T19:53:25.017 に答える
1

Wompはそれを持っていると思います...

ああ、ルートを交換している間に試してみてください

routes.MapRoute(null, "HelpDesk/Ticket/Details/{TicketId}", new { controller = "Ticket", action = "Details"})

私は、TicketId = "id"が物事を台無しにしていると思います

それが役立つことを願って、

ダン

于 2009-08-14T21:31:49.357 に答える