Asp.net-Mvc

Razor MVC4 Url.Action 不起作用

  • November 25, 2013

我在剃刀視圖中有如下程式碼

<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 生成的程式碼直接放在沒有 Html.Raw 的 razor 視圖中,它工作正常。但是,如果我取出 Html.Raw 執行時生成的 html 腳本,顯示如下

<style type='text/css'></style><center><div style="width:460px;"><div style="width: 460px; float: left;"><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(“Details”, “Mycontr”, new {id =16}, Request.Url.Scheme)**

引用自:https://stackoverflow.com/questions/15441085