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

时间:2016-02-04 14:49:49

标签: 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")+">Link</a>";

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

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

拜托,我将非常感谢您解决此问题。

我正在研究MVC 5,ASP.Net 4.5,Entity Framework 6

1 个答案:

答案 0 :(得分:-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"); }
    }
}

Razor观点:

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

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

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