Искаженные символы в URI, сгенерированном при вызове URL.Action с jQuery Script

У меня есть следующий код как часть сценария jquery для открытия диалога jqueryui (значение id жестко закодировано в целях тестирования):

        open: function (event, ui) {

            $(this).load("@Url.Action("Edit", "Person",
                new
                {
                    id = Guid.Parse("28769371-7518-49db-a5ea-b9c62621a609"),
                    selectedPersonFor = Model.SelectedPersonFor,
                    selectedPersonForId = Model.SelectedPersonForId,
                    clientAccountId = Model.ClientAccountId
                })");
        },

Проблема в том, что, хотя диалог открывается, действие контроллера никогда не выполняется.

Если я просматриваю исходный текст в браузере, то получается следующее:

open: function (event, ui) {

            $(this).load("/Person/Edit/28769371-7518-49db-a5ea-b9c62621a609?selectedPersonFor=ClientAccount&selectedPersonForId=2a2dd3b9-a73b-4afa-8237-5a4f37736f8a&clientAccountId=00000000-0000-0000-0000-000000000000");
        },

Я обнаружил, что если я жестко закодирую URI выше в моем скрипте и заменю амперсанд (&), заключенный в рамку, на амперсанд (&), не заключенный в рамку, то действие контроллера будет выполнено.

Я пробовал добавить вызов метода replace в свой скрипт, чтобы избавиться от амперсанда, но это не помогло. Когда я смотрю на другие URI на той же странице, которые генерируются для вызова действий контроллера, но не в скрипте, я замечаю, что они содержат амперсанды в экранированном виде.

Похоже, что существует некоторая разница в том, как браузер обрабатывает вызов действия контроллера из скрипта и как он делает это вне скрипта - и все это связано с экранированным амперсандом.

Может ли кто-нибудь подсказать мне, как решить эту проблему?

Дополнительная информация:

Я также пробовал передавать параметры запроса в функцию load следующим образом:

open: function (event, ui) {

            $(this).load("@Url.Action("Edit", "Person")",
                {
                    id: @Guid.Parse("28769371-7518-49db-a5ea-b9c62621a609"),
                    selectedPersonFor: Model.SelectedPersonFor,
                    selectedPersonForId: Model.SelectedPersonForId,
                    clientAccountId: Model.ClientAccountId
                });
        },

Однако, когда я делаю это таким образом, мой диалог даже не открывается.

Edit:

В ответ на просьбу показать маршрут я предоставил следующее (надеюсь, это то, что было запрошено):

routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

Я просто использую маршруты по умолчанию, поставляемые с моим проектом asp.net mvc3.

5
задан Darin Dimitrov 7 January 2012 в 08:51
поделиться