1

コントローラーのコンストラクターで URL を生成しようとすると問題が発生します

    private BreadCrumbItem breadCrumbItem;

    public SummaryController()
    {
        this.breadCrumbItem = new BreadCrumbItem { Title = "Sommaire", Url = Url.RouteUrl(new { controller = "Summary", action = "Index" }) };

    }

問題は Url.RouteUrl にあります

コントローラーでこれにアクセスできないのはなぜですか? これを修正する方法はありますか?そうしないと、このコントローラーのすべてのアクションに同じコードを追加する必要があるためです。

手伝ってくれてありがとう

4

4 に答える 4

5

私があなたの質問を正しく理解しているなら、あなたはこのようなものが欲しいです:

public class SummaryController
{
    public SummaryController()
    {

    }

    private BreadCrumbItem _breadCrumbItem = null;

    private BreadCrumbItem CrumbItem
    {
        get
        {
             if(_breadCrumbItem == null)
             {
                  _breadCrumbItem = new BreadCrumbItem { Title = "Sommaire", Url =        Url.RouteUrl(new { controller = "Summary", action = "Index" }) };
             }

             return _breadCrumbItem;
         }
    }
}

これで、各メソッドでCrumbItemを使用するだけで、最初に新しいBreadCrumItemが作成され、その後は呼び出されるたびに作成されたアイテムが返されます。

于 2012-11-20T11:59:00.670 に答える
3

メソッドをオーバーライドできますInitialize()Urlプロパティは、ベース コントローラが初期化されると設定されます。

protected override void Initialize(RequestContext requestContext)
{
    // the controller's UrlHelper is still null
    base.Initialize(requestContext);

    // the controller's UrlHelper is now ready to use!
    var url = Url.RouteUrl(...);
}
于 2017-05-10T18:12:31.923 に答える
2

コントローラーではアクセスできますが、コンストラクターではアクセスできません。この値は、コントローラーがコントローラービルダーによって作成された後に設定されるため、コンストラクターが呼び出された時点では設定されません。@middelpat ソリューションを使用してプロパティを遅延ロードする (現在のアクションで最初に使用するときに作成する) ことは、問題に対する合理的な解決策です。その時点で、UrlHelper インスタンスがコントローラーで使用可能になっているはずです。

于 2012-11-20T12:04:49.780 に答える
0

私はあなたがこの答えのようなものが必要だと思います:

https://stackoverflow.com/a/700357/637425

引用:

特定のアクションへのパスを取得したいだけの場合は、UrlHelperを使用してください。
UrlHelper u = new UrlHelper(this.ControllerContext.RequestContext);
string url = u.Action("About", "Home", null); 
ハイパーリンクを作成する場合:
string link = HtmlHelper.GenerateLink(this.ControllerContext.RequestContext,
System.Web.Routing.RouteTable.Routes, "My link", "Root", "About",
"Home", null, null);  
Intellisenseは、各パラメーターの意味を提供します。
于 2012-11-23T12:34:49.047 に答える