2011-10-21 2 views
0

デフォルトのルーティングを利用しようとしているため、クエリ文字列パラメータを持たないURLを取得しています。MVC3のデフォルトのルーティングで正しいURLを表示するために@ActionLinkを取得できません。

http://www.mysite.Items/Edit?ItemID=19719 

そして、私はこのようなURL取得しようとしている:

http://www.mysite.Items/Edit/19719 

ルーティング作品を、私は得ることができない

だから、私は現在、このURLを持っています2番目のURLを生成する@ Html.ActionLinkメソッド。

@Html.ActionLink("Edit", "Edit", new {item.ItemID}, new { id = "edit-" + item.ItemID }) 

最初の引数は、私のリンクのテキストです:

は、ここに私のかみそりのコードです。第2引数はアクションです。 3番目はID Valueで、最後の引数はHTML属性で、私が使用しているJavaScriptの場合は使用します。

は、もともと私は

new {itemID = itemID} 

としての私の第三引数を持っていた私の編集アクションはパラメータとしてITEMIDという名前の整数値を期待するときにでした。私はそれを 'id'に変更してルーティングがうまくいくようにしました。

理想的には、itemIDという名前の引数を持つアクションに19719値を渡すルートが欲しいですが、これはこの質問の範囲を超えています。

ありがとうございます。

ソルブード ありがとうございましたDarin Dimitrovこのソリューションです。

私は自分のHTMLコードとアクション引数をそのまま残してしまいました。本当に必要だったのは私のルートの更新だった。私はデフォルトの前に私の新しいルートマップを追加しなければならなかったことに注意する必要があります。とにかく、これで私のルート登録が完成しました。

public static void RegisterRoutes(RouteCollection routes) { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     routes.MapRoute("", "Items/{action}/{itemID}", new { controller = "Items", action = "Details", itemID = @"\d+" }); 
     routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });   
    } 

答えて

4

デフォルトルートは、ルートトークン名としてid使用していますので、あなたがしたい:

@Html.ActionLink(
    "Edit", 
    "Edit", 
    new { id = item.ItemID }, 
    new { id = "edit-" + item.ItemID } 
) 

お知らせnew { id = item.ItemID }なくnew {itemID = itemID}ないnew {item.ItemID}

+0

ダーウィンディミトロフはあなたに答えました:D ラッキーデュード – salahy

+0

彼はめったに '.net'タグ';) 'の下で質問を逃しません – Rafay

+0

itemIDをパラメータとして許可するルートを登録することは可能ですか?次のようなものがあります:routes.MapRoute( "Default"、 "{controller}/{action}/{id}"、新しい{controller = "Home"、action = "Index"、itemID = UrlParameter.Optional}); –

関連する問題