7

私はカミソリビューで以下のようなコードを持っています

<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)) 

変数には、Ur.Action を持つ生成された html が含まれます。Html.Rawなしでhtml生成コードをかみそりビューに直接配置すると、正常に動作します。しかし、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.Raw エンコーディングを使用せずに html スクリプトを変数に表示する方法はありますか? 生成された Html スクリプトを保持する文字列変数の代わりに HtmlString を使用することで問題の半分は解決されましたが、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();
4

2 に答える 2

11

少し遅れていることはわかっていますが、何かを探しているときにこの投稿に出くわしました。

ここでコードの問題は、アンカータグと二重引用符にあります。

<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)'>

href は@Url.Action("Details", "Mycontr", new {id =16}, Request.Url.Scheme) になります

于 2013-08-17T09:50:56.913 に答える
-5

問題を解決しました。私は本当に@Url.Actionをhrefに必要としません。以下のようにコードを論理パスに置き換えました

/Publication/Capsule/ + capId

このリンクは私が問題を解決するのに役立ちました。ホルヘのおかげで仕事の日数を節約できます:)

于 2013-03-17T08:16:35.313 に答える