在我的asp.net mvc3网站上,我在视图中使用Url.Action
来生成网址。
@Url.Action("Profile", "Users", new { @Id = Model.UserId, name = Model.NickName })
现在,在我的一个助手课程中,我需要做同样的事情。但得到此错误消息,“当前上下文中不存在名称'Url'。
我可以用另一个函数来生成url吗?
答案 0 :(得分:12)
示例中的@Url是UrlHelper
类的实例。您可以创建它的实例并在任何类中使用,如下例所示,但您需要访问相应View的RequestContext
(在我的示例中为命名上下文)。
var urlHelper = new UrlHelper(context);
string absUrl = urlHelper.Action("ActionName",
"ControllerName", null, Request.Url.Scheme);
答案 1 :(得分:2)
您不能在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 })
答案 2 :(得分: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而不提供上下文。
上下文始终是必需的,因为它包含服务器的信息,以及应用程序运行时的虚拟指示(如果存在)。