У меня есть следующий код как часть скрипта 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 в своем скрипте и заменил экранированный амперсанд (&) на не экранированный амперсанд (&), то мое действие контроллера попадет под удар.
Я попытался добавить вызов метода замены в моем скрипте, чтобы избавиться от экранированного амперсанда, но это не помогает. Когда я смотрю на другие URI на той же странице, которые сгенерированы для вызова действий контроллера, , но не внутри скрипта , я замечаю, что внутри них экранированы амперсанды.
Кажется, есть некоторое различие в том, как браузер обрабатывает вызов действия контроллера из сценария относительно того, как он выполняет его вне сценария - и все это связано с экранированным амперсандом.
Может кто-нибудь подсказать мне, как преодолеть эту проблему?
Дополнительная информация:
Я также попытался передать параметры запроса в функцию загрузки следующим образом:
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.