【问题标题】:Value cannot be null. Parameter name: routeCollection值不能为空。参数名称:routeCollection
【发布时间】:2016-05-14 05:58:57
【问题描述】:

我正在尝试在我的应用程序的模型中动态创建一个 url,但在使其正常工作时遇到了一些问题。 这就是我的工作

UrlHelper url = new UrlHelper(); var link = "<a href="+@url.Action("ActionName","ControllerName", new { controller = "ControllerName", action = "ActionName", id = UrlParameter.Optional },"http")+">Link</a>";

但是当我尝试运行它时,我收到以下错误:

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

请帮我解决这个问题。

我正在开发 MVC 5、ASP.Net 4.5、实体框架 6

【问题讨论】:

  • 除非你将当前的RequestContext 传递给模型,否则你不能这样做,即使那样做也没有任何意义。使用@Html.ActionLink()在视图中创建链接

标签: asp.net-mvc razor model


【解决方案1】:

如果您将 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"); }
    }
}

剃刀视图:

@model ViewModel
<a href="@Model.ActionLink">About link</a>

以及一些一般性建议和良好做法:

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

【讨论】:

  • 当我使用它时,这就是我得到的 Object reference not set to an instance of an object. 并且这一行被突出显示 var url = new UrlHelper( HttpContext.Current.Request.RequestContext)
  • 取决于你在哪里,但你必须提供RequestContext。了解如何访问您的 Request 对象。你的代码在哪里?在控制器、视图、模型中...?
  • 好的,我只是扩展了示例。将控制器中的 UrlHelper 注入模型!
  • 好的。感谢你付出的努力。但是,考虑到最佳实践建议,我决定走另一条路。
猜你喜欢
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-16
  • 2014-05-17
  • 2015-11-05
相关资源
最近更新 更多