簡體   English   中英

在MVC的控制器中使用ActionLinks構建URL

[英]Building a URL with ActionLinks from within a Controller in MVC

我正在構建一個基本的抽認卡應用程序-一套包含卡片和其他套。 導航到Set1> Set2> Set3之類的內容時,我希望每個父級“集合”都鏈接到其各自的詳細信息頁面。 我正在向Details視圖模型傳遞一個名為“ 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”。

有誰知道我如何使它工作,或者是否有更好的方法來做到這一點?

只需評估一下:

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

我認為這里的一個重要問題是:“您的視圖長什么樣?”

如果您的視圖正在使用該model.Breadcrumbs字段,如下所示:

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

您構建的字符串中的@ Url.Action調用將永遠不會執行。 Razor引擎對在視圖文件中找到的代碼進行操作,而不對模型中的字段進行操作。

您需要執行以下兩項操作之一:

  1. 而是將“ @ Url.Action(...)”放入正在構造的字符串中,使用諸如Url.Link()之類的代碼弄清服務器端的Url,然后直接將其插入。

  2. (這更好),將那些父級作為視圖模型的一部分傳遞給視圖,並在視圖中循環遍歷它們,並隨便構造標簽。 通常,您不想將html放入模型中。 模型在那里保存數據 ,而不是表示代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM