0

私は、いくつかの例と組み合わせた基本的なプロジェクトテンプレートを使用してMVC3を学習しているところです。順調に進んでいますが、コントローラーを実装しようとしていますが、いくつか問題があります。

これまでのところ、_Layout.cshtmlファイルを変更して、指定されたルートが定義された新しいリンクを作成しました。

     <header>
        <div id="title">
            <h1>My MVC Application</h1>
        </div>
        <div id="logindisplay">
            @Html.Partial("_LogOnPartial")
        </div>
        <nav>
            <ul id="menu">
                <li>@Html.ActionLink("Home", "Index", "Home")</li>
                <li>@Html.RouteLink("Contracts", "Contract")</li>
                <li>@Html.ActionLink("About", "About", "Home")</li>
            </ul>
        </nav>
    </header>

そして私のglobal.asax.csファイルは次のとおりです。

        routes.MapRoute(
            "Contract",
            "Contract",
            new { controller = "Contract", action = "List", id = UrlParameter.Optional }
        );

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

これは、コントラクトコントローラーから期待されるアクションビューを返すため、正常に機能します。

ただし、これを変更して、リストアクションにIDを受け入れるようにします。Listメソッドを変更してパラメーターを受け入れる必要があることはわかっていますが、問題はありませんが、ルートと、このパラメーターを_Layout.cshtmlファイルのRouteLinkからListメソッドに渡す方法に問題があります。私はいくつかのことを試しましたが、このビットは本当に私を困惑させています。

AccountControllerを介してログインしたユーザーからIDを渡すつもりですが、これをより簡潔にするために、それについて別の質問をします。

どうもありがとうございます。

4

1 に答える 1

1

デフォルトルートは、パターンコントローラー/アクション/(ここではオプションのidパラメーター)に対応するすべてのコントローラーとアクションで機能するため、実際にはコントラクトルートは必要ありません。テンプレートのコメントを参照してくださいParameter defaults。つまり、コントローラー、アクション、またはIDが渡されていない場合、デフォルトでこれらの値になります。そのため、Webサイトのルートを参照するだけで、ホームコントローラーのインデックスアクションがデフォルトの呼び出しになります。

ルートを使用する場合、ルートパラメータ名はアクションのパラメータ名と一致する必要があることを覚えておく必要があります。たとえば、デフォルトルートでは現在次のことができます。

[HttpGet]
public ActionResult MyAction(int id) {

}

ただし、デフォルトルートを次のように変更した場合:

routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{myIDParameter}", // URL with parameters
        new { controller = "Home", action = "Index", myIDParameter = UrlParameter.Optional } // Parameter defaults
    );

..インデックスアクションは整数パラメータを適切にバインドしなくなります..アクションを次のように変更する必要があります:

[HttpGet]
public ActionResult MyAction(int myIDParameter) {

}

あなたの質問に答えて、あなたがすでに持っている他の2つのように、ActionLinkを使用する方が理にかなっているかもしれません:

@Html.ActionLink("Contracts", "Contract", "ActionMethodHere", new { id = UserIdHere }, null)

ただし、契約ルートを削除し、デフォルトルートを使用することを前提としています。

于 2012-08-04T10:30:11.877 に答える