我有一個代碼,如下面的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所顯示的一樣
<style type='text/css'></style><center><div style="width:460px;"><div style="width: 460px; float: left;"><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();
任何不使用Html.ActionLink助手的理由? – Floremin 2013-03-16 05:09:16
你可以嘗試用href替換單引號。在HTML和C#代碼中使用雙引號可能會令渲染引擎(Razor)混淆。 – Floremin 2013-03-16 05:21:36
你有結尾標記嗎?一個您發佈它包裝 – Dima 2013-03-16 07:13:29