web-dev-qa-db-ja.com

Url.Actionはアンプを配置します。私のURLで、これをどのように解決できますか?

変数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

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

81
Niek de Klein

昨日、あなたが_&_を持っていることに気づきませんでしたSOエディターがそれを変更したと思います。Url.Action()@Html.Raw()&のエンコードを防止します。

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

117
K. Bob

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

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

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

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

これを修正するには、@Html.Raw()/<%=(両方ともエンコードしない)を使用するか、PostActionプロパティを既にエンコードされていることを知っているIHtmlStringにします。

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