Url.Actionは& 私のURLで、これをどのように解決できますか?


89

変数itemIdおよびentityModelをActionResult CreateNoteに送信します。

public ActionResult CreateNote(
        [ModelBinder(typeof(Models.JsonModelBinder))]
        NoteModel Model, string cmd, long? itemId, string modelEntity)

このjavascriptで:

Model.meta.PostAction = Url.Action("CreateNote", new { cmd = "Save", itemId = itemId, modelEntity = modelEntity});

ただし、送信されるURLは

localhost:1304/Administration/blue/en-gb/Entity/CreateNote?modelEntity=Phrase&itemId=44     

送りたい

localhost:1304/Administration/blue/en-gb/Entity/CreateNote?modelEntity=Phrase&itemId=44

送信する2番目の変数の前に&を配置するUrl.Actionを防ぐにはどうすればよいですか?


それ&が大丈夫ではないと思う理由は何ですか?
2012年

1
ブレークポイントでActionResultを見るとき、localhost:1304 / Administration / blue / en-gb / Entity / CreateNote?modelEntity = Phrase& itemId = 44 modelEntity = PhraseおよびitemId = nullがあるとき。それらをJavaScriptで向きを変えて、localhost:1304 / Administration / blue / en-gb / Entity / CreateNote?itemId = 44& modelEntity = Phrase itemId = 44およびmodelEntity = nullを取得すると、それが&に関係していると私が思う理由です。
Niek de Klein、2012

4
@Oded —データがHTMLではなくJavaScriptに挿入されるため。
クエンティン

回答:


126

昨日&、SOエディターがそれを変更したと思っていたことに気づきませんでした。&のエンコードを防ぐために、Url.Action()でラップしてみてください@Html.Raw()

またはUrl.Action()、コントローラー/アクションビットのみを使用し、URLに直接ではなく、2つのパラメーターをポストデータとして渡す場合、jQueryは&をそのように整理する必要があります。


43
このソリューションは機能しますが、なぜUrl.Actionもエンコードされるのですか?予期しない動作について話します。
ジェリー

13

あなたの問題は次のとおりだと思いますModel.meta.PostAction-そのプロパティはstringですか?

もしそうなら、私の推測はあなたがそれをページに追加していることでしょう:

  • かみそり: @Model.meta.PostAction
  • ASPビューエンジン: <%:Model.meta.PostAction%>

どちらも自動的にその文字列をエンコードします。

これを修正するには、@Html.Raw()/ <%=(どちらもエンコードしない)を使用するか、すでにエンコードされていることを認識するPostActionプロパティをanにIHtmlStringします。

string actionUrl = Url.Action("CreateNote", new { cmd = "Save", itemId = itemId, modelEntity = modelEntity});
Model.meta.PostAction = new HtmlString(actionUrl);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.