Member 12824529 Ответов: 2

Как заставить @ajax.actionlink работать с 2 параметрами?


У меня есть приложение MVC, в котором я использую ActionLinks, подобные приведенным ниже, для запуска хранимой процедуры в SQL Server через веб-API и отображения результатов в элементе div. Эти два параметра являются входными параметрами хранимой процедуры. Чтобы не путать, ObjType-это просто обычное имя переменной, не относящееся к типу объекта ООП.


Приведенная ниже команда ActionLink создает этот URL-адрес, который выдает ошибку 404 (не найден). Обратите внимание, что он обрабатывает эти два параметра по-разному.
-----------------------------------------------------------------------------------
http://localhost:58641/api/ControllerName/Get/1-что?ObjType=Gizmo


Но если я изменю URL вручную на этот, он работает и возвращает нужные данные.
-----------------------------------------------------------------------------------
http://localhost:58641/api/ControllerName/Get?id=1&ObjType=Gizmo


Вопрос: поиск в интернете до сих пор не помог в этом вопросе.
Как я могу получить "Аякс"?Команда ActionLink, чтобы дать мне правильный URL-адрес?

Что я уже пробовал:

@Ajax.ActionLink("LOCUS", "Get", "api/ControllerName", 
                  new { id = 1, ObjType = "Gizmo" },
                  AjaxOptions
	             HttpMethod = "GET",
	             UpdateTargetId = "divResult",
	             InsertionMode = InsertionMode.Replace
                })

2 Ответов

Рейтинг:
10

Member 12824529

РЕШЕННЫЙ

Я обнаружил, что это вызывает проблему, если я называю первый параметр "id" Если я назову его "id" и поставлю

new (id = 1, objType = 'Gizmo'),

то url, выходит так

<controllername>/<actionname>/1?ObjType=Gizmo

который не принимается методом действия контроллера. Но если я назову его чем-то еще, кроме " id " или очевидного ключевого слова, например ClientID, то URL-адрес будет правильно выглядеть следующим образом

<controllername>/<actionname>?ClientID=1&ObjType=Gizmo


Рейтинг:
0

Kornfeld Eliyahu Peter

Здесь:

new { id = 1, ObjType = "Gizmo" }

Сделай что-нибудь вроде этого:
new { id = 1, ObjType = "Gizmo", param1 = "value1", param2 = "value2" }

На стороне сервера у вас должен быть метод Get с соответствующим списком параметров...
Get(string id, string ObjType, string param1, string param2)


Member 12824529

Спасибо. На самом деле ID и objType-это два параметра. ObjType, вероятно, не очень хороший выбор с моей стороны, так как похоже, что я имею в виду тип объекта, но это просто обычный параметр. Проблема, с которой я столкнулся, - это Аякс.ActionLink обрабатывает первый параметр иначе, чем остальные. Поэтому вместо того, чтобы добавлять его после действия с ?id=1&objType=Gizmo, он добавляет вместо этого с /1?objType-Gizmo. Он обрабатывает первый параметр так, как будто это имя действия.