3

私のasp.netmvc3WebサイトでUrl.Actionは、ビューでURLを生成するために使用しています。

@Url.Action("Profile", "Users", new { @Id = Model.UserId, name = Model.NickName })

今、私のヘルパークラスの1つで、同じことをする必要があります。しかし、このエラーメッセージが表示されます。「名前'Url'は現在のコンテキストに存在しません。

URLを生成するために使用できる別の関数はありますか?

4

3 に答える 3

12

あなたの例の@UrlはUrlHelperクラスのインスタンスです。RequestContextそのインスタンスを作成して、以下の例のように任意のクラスで使用できますが、対応するビューの(私の例では名前付きコンテキスト)へのアクセス権が必要です。

var urlHelper = new UrlHelper(context);
string absUrl = urlHelper.Action("ActionName", 
          "ControllerName", null, Request.Url.Scheme);
于 2012-05-29T19:20:10.993 に答える
3

Razorビューの外でRazorヘルパーを使用することはできません。これは@Url、Razorヘルパーであり、ビューページにのみスコープされます。.netクラスファイル内ではありません。

クラスファイルでこの例を試してください

var urlHelper = new UrlHelper(context);
string absUrl = Url.Action("Users", "Users",  new { Id = UserId, name =.NickName }, Request.Url.Scheme);

または、コントローラーから使用するだけです

return RedirectToAction("Profile", "Users", new { @Id = Model.UserId, name = Model.NickName })
于 2012-05-29T19:12:27.390 に答える
1

このコードはどこでも使用でき、UrlHelperやコンテキストは必要ありません。

RouteValueDictionary rvd = new RouteValueDictionary
{
  {"controller", "ControllerName"}, 
  {"action", "ActionName"}, 
  {"area", ""}
};

VirtualPathData virtualPathData 
   = RouteTable.Routes.GetVirtualPath(null, new RouteValueDictionary());
return virtualPathData.VirtualPath;

これは、プロパティ'HttpContext.Current'がnullでない場合にのみ機能します。これは、Webアプリで実行されているコードに当てはまります。GetVirtualPathの最初のパラメーターを指定しない場合、システムは前述の静的プロパティによって返されるコンテキストを使用します。

したがって、このメソッドを使用して、コンテキストを指定せずにURLを取得できることは事実です。

コンテキストは、サーバーの情報と、アプリが実行されている仮想ディレクトリ(存在する場合)があるため、常に必要です。

于 2013-07-09T11:25:49.320 に答える