3

ビューの 1 つにアンカーがあります。

<a name="@("Doc" + Model.Key)"></a>

別のビューからこのアンカーにリンクしたい:

<a href="@(Url.Action("Update") + "#Doc" + Model.DocumentId)">Go To Document Properties</a>

これにより、次のような URL が生成されます。http://localhost:60010/Session/Update#Doc1

このリンクをクリックすると、次のエラーが表示されます。

パラメーター ディクショナリには、'Controllers.SessionController' のメソッド 'System.Web.Mvc.ActionResult Update(Int32)' の null 非許容型 'System.Int32' のパラメーター 'id' の null エントリが含まれています。オプションのパラメーターは、参照型または null 許容型であるか、オプションのパラメーターとして宣言する必要があります。パラメータ名: パラメータ

カスタム ルートは使用せず、デフォルト ルートを使用しています。

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

#Doc1MVC で URL の html アンカー (たとえば、)を無視するにはどうすればよいですか?

4

2 に答える 2

4

@BrettSmith が投稿したアドバイスに従って、次の解決策を思いつきました。

  1. アンカーと制約を含む 2 つ目のルートを追加して、アンカーが指定されている場合にのみこのルートが選択されるようにしました。

    routes.MapRoute(
            "DocAnchor", // Route name
            "{controller}/{action}/{id}#{anchor}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional, anchor = UrlParameter.Optional }, // Parameter defaults
            new { anchor = ".+" } // ".+" regex means any character one or more times.
        );
    
        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );      
    
  2. これへのリンクを変更しました:

    <a href="@(Url.Action("Update", new { id=Model.DocumentId, anchor="Doc" + Model.DocumentId }).Replace("%23", "#"))">Go To Document Properties</a>
    

    ルート データ オブジェクトの一部としてアンカーを渡していることに注意してください (ID を渡さないというバグもありましたが、これも修正しました)。 Url.ActionUrlEncodes は文字列であるため%23、ブラウザーにアンカーを認識させるには、 をハッシュ char に置き換える必要がありました。

于 2012-06-29T19:49:20.530 に答える
2

これを行うルートがありましたが、ハードドライブの障害で失われました。メモリから、次を含むルートを指定する必要があります

{controller}/{action}#{documentid}

documentid は id 以外のものであれば何でもかまいません

また、コントローラーに int を期待させる必要がありますか? int id ではなく id

于 2012-06-29T19:28:56.797 に答える