【问题标题】:Building a URL with ActionLinks from within a Controller in MVC在 MVC 的控制器中使用 ActionLinks 构建 URL
【发布时间】:2026-01-19 11:35:01
【问题描述】:

我正在构建一个基本的抽认卡应用程序 - 一个集合包含卡片和其他集合。当导航到 Set1 > Set2 > Set3 之类的内容时,我希望每个父“集”都链接到它们各自的详细信息页面。我正在向 Details viewModel 传递一个名为“breadcrumbs”的字符串,其中包含如下内容:

var stringBuilder = "";
            var parent = model.ParentSet;

            while (parent != null)
            {
                stringBuilder += "<li><a href=\"@Url.Action('Detail', 'Set', new {SetId = \" + parentSetId + \"}, null)'>" + parent.Name + "</a> <span class='divider'>/</span></li>";
                parent = parent.ParentSet;
            }
            model.Breadcrumbs =
                "<li><a href=\"@Url.Action('Index', 'Home')\">Home</a> <span class='divider'>/</span></li>" +
                stringBuilder + "<li class='active'>New Set</li>";
            model.Name = "New Set";

生成的 URL 是文字的 - 包含“@Url.Action”。

有谁知道我怎样才能让它工作,或者是否有更好的方法来做到这一点?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 twitter-bootstrap asp.net-mvc-4


    【解决方案1】:

    评估一下:

    "<li><a href='" + Url.Action('Index', 'Home') + "'>..."
    

    【讨论】:

      【解决方案2】:

      我认为这里的一个重要问题是,“你的观点是什么样的?”

      如果您的视图正在使用该 model.Breadcrumbs 字段,如下所示:

      ...
      <div id="breadcrumbs">
          @model.Breadcrumbs
      </div>
      ...
      

      您所构建的字符串中的@Url.Action 调用将永远不会被执行。 Razor 引擎对它在视图文件中找到的代码进行操作,而不是对模型中的字段进行操作。

      您需要做以下两件事之一:

      1. 不如将“@Url.Action(...)”放入您正在构建的字符串中,使用 Url.Link() 之类的东西找出服务器端的 Url 并直接插入。

      2. (这样更好)将这些父级作为视图模型的一部分传递给视图,并在视图中循环遍历它们在视图中,并在执行过程中构建标签。通常,您不想将 html 放入模型中。模型用于保存数据,而不是演示代码。

      【讨论】: