Asp.net mvc 值不能为null。参数名称:routeCollection

Asp.net mvc 值不能为null。参数名称:routeCollection,asp.net-mvc,razor,model,Asp.net Mvc,Razor,Model,我试图在我的应用程序中的模型内动态创建url,但在使其工作时遇到一些问题。 我就是这么做的 UrlHelper url = new UrlHelper(); var link = "<a href="+@url.Action("ActionName","ControllerName", new { controller = "ControllerName", action = "ActionName", id = UrlParameter.Optional },"http")+">L

我试图在我的应用程序中的模型内动态创建url,但在使其工作时遇到一些问题。 我就是这么做的

UrlHelper url = new UrlHelper(); var link = "<a href="+@url.Action("ActionName","ControllerName", new { controller = "ControllerName", action = "ActionName", id = UrlParameter.Optional },"http")+">Link</a>";
UrlHelper url=新的UrlHelper();var link=“”;
但当我尝试运行它时,会出现以下错误:

值不能为空。 参数名称:routeCollection

请帮我解决这个问题,我将不胜感激


我正在使用MVC 5、ASP.Net 4.5、Entity Framework 6

如果将urlHelper注入视图模型,则可以访问它以创建链接:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new ViewModel(this.Url);
        return View(model);
    }

    public ActionResult About()
    {
        return View();
    }
}

public class ViewModel
{
    private readonly UrlHelper _urlHelper;

    public ViewModel(UrlHelper urlHelper)
    {
        _urlHelper = urlHelper;
    }

    public string AboutLink
    {
        get { return _urlHelper.Action("About", "Home"); }
    }
}
Razor视图:

@model ViewModel
<a href="@Model.ActionLink">About link</a>
@model视图模型
以及一些一般性建议和良好做法:

  • 不要在模型或控制器中创建HTML,这是视图作业视图
  • 模型只是一个数据包,不要把任何逻辑放在那里。将控制器用于表示特定的逻辑
  • 您可以在视图中访问UrlHelper,从那里使用它。另外,为urlHelper构建扩展方法以创建特定的Url,特别是在需要其他参数的情况下,例如Razor文件中的用法如下:
    @Url.GenerateProductLink(model.ProductId)

当我使用它时,这就是我得到的对象引用没有设置为对象的实例。这一行突出显示为var url=newurlhelper(HttpContext.Current.Request.RequestContext),这取决于您所在的位置,但您必须提供RequestContext。查看如何访问请求对象。你的密码在哪里?在控制器、视图、模型等中?好的,我只是扩展了这个例子。将控制器中的UrlHelper注入模型!好啊谢谢你的努力。但是,考虑到最佳实践建议,我决定采用另一种方法。除非您将当前的
RequestContext
传递给模型,否则您不能这样做,即使这样做也没有意义。使用
@Html.ActionLink()