简体   繁体   English

Razor MVC4 Url.Action无效

[英]Razor MVC4 Url.Action not working

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. Html.Raw导致问题。 I have the code like 我有像这样的代码

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

the variable contains generated html that has Ur.Action. 该变量包含生成的具有Ur.Action的html。 If I just place directly the html generated code in razor view without Html.Raw it is working fine. 如果我只是直接将html生成的代码放在razor视图中而不使用Html.Raw它工作正常。 But if I take out Html.Raw the runtime generated html script that is displayed like 但是,如果我拿出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? 有没有一种方法可以在不使用Html.Raw编码的情况下在变量中显示html脚本? 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. 通过使用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();

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)

I have solved the issue. 我已经解决了这个问题。 I really dont need @Url.Action to the href. 我真的不需要@ url.Action来href。 I have just replaced the code to logical path as below 我刚刚将代码替换为逻辑路径,如下所示

/Publication/Capsule/ + capId

this link helped me solve the issue. 这个链接帮我解决了这个问题。 Thanks to Jorge saving days of work :) 感谢Jorge节省工作时间:)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM