在MVC中的Controller中使用ActionLinks构建URL

时间:2013-02-12 20:51:59

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

我正在构建一个基本的闪卡应用程序 - 一个包含卡片和其他集合。当导航到Set1>之类的东西时Set2> Set3,我希望每个父“Set”链接到各自的详细信息页面。我正在向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”。

有谁知道如何让这个工作,或者有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

评估它:

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

答案 1 :(得分:0)

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

如果您的视图正在使用该模型.Breadcrumbs字段如下:

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

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

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

  1. 而是将“@ Url.Action(...)”放入您正在构建的字符串中,使用类似Url.Link()的内容找出Url在服务器端的内容并直接插入。

  2. (这是更好的)将这些父项作为视图模型的一部分传递给视图,并在视图中循环它们,随时构建标记。通常,您不希望将html放入模型中。该模型用于保存数据,而非呈现代码。