Razor MVC4 Url.Action无效

时间:2022-11-30 22:47:24

I have a code as below in razor view

我在剃刀视图中有如下代码

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

while I double click on this item it is redirected to below Url

当我双击这个项目时,它被重定向到Url下面

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

But whereas the expected was

但是预期的却是

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

Below is RouteConfig

以下是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 }
 );

Kindly suggest.

请建议。

I narrowed down the issue. Html.Raw is causing issue. I have the code like

我缩小了这个问题。 Html.Raw导致问题。我有类似的代码

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

the variable contains generated html that has Ur.Action. If I just place directly the html generated code in razor view without Html.Raw it is working fine. But if I take out Html.Raw the runtime generated html script that is displayed like

该变量包含生成的具有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...

Is there a way that I can display html script in variable without using Html.Raw encoding? Half the issue got resolved by using HtmlString instead string variable for holding generated Html script, but the HtmlString couldn't decode @Url.Action syntax in the string.

有没有办法可以在不使用Html.Raw编码的情况下在变量中显示html脚本?通过使用HtmlString代替字符串变量来保存生成的Html脚本,解决了一半问题,但HtmlString无法解码字符串中的@ Url.Action语法。

Below is the latest code that I have been struggling to get it work. Please help.

下面是我一直在努力使其工作的最新代码。请帮忙。

                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 个解决方案

#1


10  

I know its bit late but I came across this post when I am searching for something.

我知道它有点晚了,但是当我在搜索某些东西时,我遇到了这个帖子。

Here in your code problem is with your anchor tag and the double quotes.

在您的代码中,问题在于您的锚标记和双引号。

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

You are technically telling the parser that you are referencing the hyperlink between "URL" (double quotes) that means href is @Url.Action(. You can do this way (use single quote to assign your href) and hope that works

您在技术上告诉解析器您引用了“URL”(双引号)之间的超链接,这意味着href是@ Url.Action(。您可以这样做(使用单引号分配您的href)并希望它有效

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

now you href will be @Url.Action("Details", "Mycontr", new {id =16}, Request.Url.Scheme)

现在你href将是@ Url.Action(“详细信息”,“Mycontr”,新{id = 16},Request.Url.Scheme)

#2


-4  

I have solved the issue. I really dont need @Url.Action to the href. I have just replaced the code to logical path as below

我已经解决了这个问题。我真的不需要@ url.Action来href。我刚刚将代码替换为逻辑路径,如下所示

/Publication/Capsule/ + capId

this link helped me solve the issue. Thanks to Jorge saving days of work :)

这个链接帮我解决了这个问题。感谢Jorge节省工作时间:)

#1


10  

I know its bit late but I came across this post when I am searching for something.

我知道它有点晚了,但是当我在搜索某些东西时,我遇到了这个帖子。

Here in your code problem is with your anchor tag and the double quotes.

在您的代码中,问题在于您的锚标记和双引号。

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

You are technically telling the parser that you are referencing the hyperlink between "URL" (double quotes) that means href is @Url.Action(. You can do this way (use single quote to assign your href) and hope that works

您在技术上告诉解析器您引用了“URL”(双引号)之间的超链接,这意味着href是@ Url.Action(。您可以这样做(使用单引号分配您的href)并希望它有效

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

now you href will be @Url.Action("Details", "Mycontr", new {id =16}, Request.Url.Scheme)

现在你href将是@ Url.Action(“详细信息”,“Mycontr”,新{id = 16},Request.Url.Scheme)

#2


-4  

I have solved the issue. I really dont need @Url.Action to the href. I have just replaced the code to logical path as below

我已经解决了这个问题。我真的不需要@ url.Action来href。我刚刚将代码替换为逻辑路径,如下所示

/Publication/Capsule/ + capId

this link helped me solve the issue. Thanks to Jorge saving days of work :)

这个链接帮我解决了这个问题。感谢Jorge节省工作时间:)