簡體   English   中英

Razor MVC4 Url.Action無效

[英]Razor MVC4 Url.Action not working

我在剃刀視圖中有如下代碼

<a href="@Url.Action("Details", "Mycontr", new {id =16}, Request.Url.Scheme)">

當我雙擊這個項目時,它被重定向到Url下面

http://localhost:49280/Mycontr/Section/@Url.Action(

但是預期的卻是

http://localhost:49280/Mycontr/Details/16

以下是RouteConfig

routes.MapRoute(
   name: "Capsule",
   url: "Mycontr/Details/{id}",
   defaults: new { controller = "Mycontr", action = "Details", id = UrlParameter.Optional }
 );
 routes.MapRoute(
   name: "Section",
   url: "Mycontr/Section/{id}",
   defaults: new { controller = "Mycontr", action = "Section", id = UrlParameter.Optional }
 );

請建議。

我縮小了這個問題。 Html.Raw導致問題。 我有像這樣的代碼

@Html.Raw(HttpUtility.HtmlDecode(Model.sContent)) 

該變量包含生成的具有Ur.Action的html。 如果我只是直接將html生成的代碼放在razor視圖中而不使用Html.Raw它工作正常。 但是,如果我拿出Html.Raw運行時生成的html腳本顯示為

&lt;style type=&#39;text/css&#39;&gt;&lt;/style&gt;&lt;center&gt;&lt;div style=&quot;width:460px;&quot;&gt;&lt;div style=&quot;width: 460px; float: left;&quot;&gt;&lt;div s...

有沒有一種方法可以在不使用Html.Raw編碼的情況下在變量中顯示html腳本? 通過使用HtmlString代替字符串變量來保存生成的Html腳本,解決了一半問題,但HtmlString無法解碼字符串中的@ Url.Action語法。

以下是我一直在努力使其發揮作用的最新代碼。 請幫忙。

                string templFile = string.Format("{0}\\DivTemplate.htm", path);
            HtmlDocument divDoc = new HtmlDocument();
            StreamReader sRdr = new StreamReader(templFile, Encoding.UTF8);
            divDoc.Load(sRdr);
            XmlNodeList divs = regions.ChildNodes;
            IEnumerator enmrDivs  = divs.GetEnumerator();
            while (enmrDivs.MoveNext())
            {
                XmlNode node = (XmlNode)enmrDivs.Current;
                string divId = node["DivId"].InnerText;
                string capId = node["CapsuleId"].InnerText;
                HtmlString sUrlAct = new HtmlString("@Url.Action(\"Capsule\", \"Publication\", new { id=\""+capId+"\" }))");
                //string sUrlAct = "@Url.Action(\"Capsule\", \"Publication\", new { id=\""+capId+"\"})";
                string divFile = string.Format("{0}\\{1}.htm", path, divId);

                HtmlDocument divRgnDoc = new HtmlDocument();
                StreamReader sR = new StreamReader(divFile, Encoding.UTF8);
                divRgnDoc.Load(sR);
                foreach (HtmlNode link in divRgnDoc.DocumentNode.SelectNodes("//a[@href]"))
                {
                    link.Attributes.RemoveAll();
                    link.Attributes.Add("href", sUrlAct.ToString());
                }
                HtmlNode divNode = divDoc.GetElementbyId(divId);
                divNode.AppendChild(divRgnDoc.DocumentNode.FirstChild.CloneNode(true));
                sR.Close();
            }

            sContent = new HtmlString (divDoc.DocumentNode.InnerHtml);
            sRdr.Close();

我知道它有點晚了,但是當我在搜索某些東西時,我遇到了這個帖子。

在您的代碼中,問題在於您的錨標記和雙引號。

<a href="@Url.Action("Details", "Mycontr", new {id =16}, Request.Url.Scheme)">

您在技術上告訴解析器您引用了“URL” (雙引號)之間的超鏈接,這意味着href是@ Url.Action( 。您可以這樣做(使用單引號分配您的href)並希望它有效

<a href='@Url.Action("Details", "Mycontr", new {id =16}, Request.Url.Scheme)'>

現在你href將是@ Url.Action(“詳細信息”,“Mycontr”,新{id = 16},Request.Url.Scheme)

我已經解決了這個問題。 我真的不需要@ url.Action來href。 我剛剛將代碼替換為邏輯路徑,如下所示

/Publication/Capsule/ + capId

這個鏈接幫我解決了這個問題。 感謝Jorge節省工作時間:)

暫無
暫無

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

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