2017-09-03 7 views
0

VS2015を使用して作成されたasp.net MVCアプリケーションがあります。私のかみそりビューでActionLinkヘルパーがパラメータ名なしでparamを渡す

は、私は次のようしている次のように

@Html.ActionLink(linkText: "Detail", 
            actionName: "Index", 
            controllerName: "SupportNotificationDetail", 
            routeValues: new { id = item.DetailFilename }, 
            htmlAttributes: null) 

を私のコントローラメソッドの定義は次のとおりです。

public class SupportNotificationDetailController : Controller 
    { 
     // GET: SupportNotificationDetail 
     public ActionResult Index(string id) 

私は、デフォルトのルーティング設定に変更はありません。

私の問題は、アクションリンクは、以下のURL生産されている。このため

ESBAMPortal/SupportNotificationDetail/Index/%7B43794F0E-23AD-4A70-AF39-3364E93F5832%7D.html 

を、私は404エラーを取得します。

ESBAMPortal/SupportNotificationDetail/Index?id=%7B43794F0E-23AD-4A70-AF39-3364E93F5832%7D.html 

私は、次のいずれかの答えを見つけることができるなら、私はことができるようになります。その後、正しいページがロードされる - idパラメータの名前となるように、私は手動でブラウザのアドレスバーにURLを編集する場合今夜寝る:

名前付きのidパラメータを持たないURLが404になるのはなぜですか? または ActionLinkヘルパーで必要なURLを指定するにはどうすればよいですか?

答えて

1

urlをリクエストすると、リクエストURLは静的コンテンツのhtmlファイルを検索しているため、要求はIISによって処理されます(リクエストには特にファイル拡張子が含まれています)。だから私は、MVCリクエストパイプラインを経由してリクエストを送らずに直接サービスを提供しようとします。

ただし、yourSiteName/SupportNotificationDetail/Index?id=somefile.htmlを要求すると、somefile.htmlはクエリ文字列の値になります。したがって、IISは直接応答を提供しません。 MVCパイプラインに送信され、要求がルートテーブルに登録されたルート定義と一致するため、パラメータidとその値を使用してIndexアクションメソッドに転送されます。

デフォルトのMVCルート定義のリクエストURLパターンは{controller}/{action}/{id}です。ここで、idはアクションメソッドのオプションパラメータです。このため、ヘルパーメソッドは上記のパターンと一致するリンクを生成するため、idパラメータを指定しないでURLを取得しています。

パラメータ名をIdから別のものに変更すると、ActionLinkヘルパメソッドは明示的なクエリ文字列パラメータ名を持つターゲットURLを生成します。

public class SupportNotificationDetailController : Controller 
{ 
    public ActionResult Index(string fildId) 
    { 
     return Content(fildId); 
    } 
} 

ビューで、

@Html.ActionLink("Detail", "Index", "SupportNotificationDetail", 
             new { fildId = Model.DetailFilename }, null) 
関連する問題