Razor MVC4 Url.Action не работает

У меня есть код, как показано ниже в бритве

<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

Ниже находится 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)) 

переменная содержит сгенерированный HTML, который имеет Ur.Action. Если я просто помещу html-сгенерированный код в бритвенное представление без 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...

Есть ли способ, которым я могу отобразить 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 ответа

Решение

Я знаю, что немного поздно, но я наткнулся на этот пост, когда я что-то ищу.

Здесь в вашем коде проблема с вашим тегом привязки и двойными кавычками.

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

Вы технически говорите парсеру, что ссылаетесь на гиперссылку между "URL" (двойные кавычки), что означает, что href - это @ Url.Action (. Вы можете сделать это (используйте одинарную кавычку, чтобы назначить свою ссылку) и надеетесь, что это сработает

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

теперь вы будете иметь @Url.Action("Детали", "Mycontr", новый {id =16}, Request.Url.Scheme)

Я решил проблему. Мне действительно не нужно @Url.Action к HREF. Я только что заменил код на логический путь, как показано ниже

/Publication/Capsule/ + capId

эта ссылка помогла мне решить проблему. Благодаря Хорхе, экономящему дни работы:)

Другие вопросы по тегам