У меня есть следующий код как часть сценария 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.