【发布时间】:2013-11-25 22:41:56
【问题描述】:
我在剃刀视图中有如下代码
<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
下面是路由配置
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();
【问题讨论】:
-
有什么理由不使用 Html.ActionLink 助手?
-
您可以尝试将双引号替换为单引号。也许 html 和 C# 代码中的双引号会混淆渲染引擎(Razor)。
-
@Floremin 是的,有理由不使用 ActionLink,因为它会生成我想在我的代码中避免的 标签,因为在我的代码中已经有 标签跟进内容并以 标记结尾。我使用 AgilityPack 进行 html 解析,当我通过它的使用指定任何属性值时,它为每个值添加双引号,不确定是否有办法让解析器避免向属性值添加引号
-
@Dima 是的,有一个结束 标记。我的格式是 一些其他内容
标签: asp.net-mvc razor asp.net-mvc-routing url.action