私はかみそりのビューで以下のようなコードを持っています
<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スクリプトが次のように表示されます。
<style type='text/css'></style><center><div style="width:460px;"><div style="width: 460px; float: left;"><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();
少し遅れていることは知っていますが、何かを探しているときにこの投稿に出くわしました。
ここでのコードの問題は、アンカータグと二重引用符にあります。
<a href="@Url.Action("Details", "Mycontr", new {id =16}, Request.Url.Scheme)">
"URL"(二重引用符)間のハイパーリンクを参照していることをパーサーに技術的に伝えています。つまり、hrefは@ Url.Action(です。この方法で実行できます(一重引用符を使用してhrefを割り当て、それが機能することを期待します
<a href='@Url.Action("Details", "Mycontr", new {id =16}, Request.Url.Scheme)'>
これで、hrefは@ Url.Action( "Details"、 "Mycontr"、new {id = 16}、Request.Url.Scheme)になります。