2

我正在构建一个基本的抽认卡应用程序 - 一个集合包含卡片和其他集合。当导航到 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”。

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

4

2 回答 2

1

简单评价一下:

"<li><a href='" + Url.Action('Index', 'Home') + "'>..."
于 2013-02-12T20:55:01.090 回答
0

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

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

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

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

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

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

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

于 2013-02-12T21:04:39.180 回答