2013-03-15 92 views
7

我有一個代碼,如下面的Razor視圖剃刀MVC4 Url.Action不工作

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

而我雙擊這個項目就被重定向到以下網址

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,它就可以正常工作。但是,如果我拿出Html.Raw所顯示的一樣

&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腳本有沒有辦法,我可以顯示在可變HTML腳本,而不使用Html.Raw編碼的方法嗎? 通過使用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(); 
+2

任何不使用Html.ActionLink助手的理由? – Floremin 2013-03-16 05:09:16

+0

你可以嘗試用href替換單引號。在HTML和C#代碼中使用雙引號可能會令渲染引擎(Razor)混淆。 – Floremin 2013-03-16 05:21:36

+0

你有結尾標記嗎?一個您發佈它包裝 Dima 2013-03-16 07:13:29

回答

10

我知道它遲了一點,但當我尋找某些東西時,我遇到了這篇文章。

這裏在你的代碼問題是你的錨標記和雙引號。

<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)

+0

這就是雙引號內的雙引號是誤導性的JavaScript – Naga 2014-08-02 14:32:57

-4

我已經解決了這個問題。我真的不需要@Hell.Action到href。我剛更換過的代碼邏輯路徑如下

/Publication/Capsule/ + capId 

this link幫我解決這個問題。感謝喬治保存工作的日子:)

+10

如果您的網站不在根級別上,該怎麼辦?例如,如果該網站是在'/部分/文件夾/主頁/ Index',一個鏈接'/出版/膠囊/ 4'不會導致您的網站。 – Kobi 2013-03-17 08:23:51

+0

我看到它引發了正確的Action方法(Capsule)。上面鏈接配置的剃鬚刀視圖頁面(.cshtml)不在根目錄。該操作被正確調用,因爲我在RouteConfig中配置了該操作。 – Naga 2013-03-17 13:23:18

+0

@Kobi,你是在我的情況的權利,不過內容是在同一臺服務器及因此上述解決方案工作。 – Naga 2014-08-02 14:31:36