У меня есть страница сведений, содержащая поле формы с именем UserId.На той же странице у меня есть другая форма поиска с полем также с именем UserId.
Я использую Html.LabelFor (vm> vm.UserId) и Html.TextBoxFor (sm> sm.UserId) на двух разных моделях представления, vm - модель представления, а sm - модель поиска.(Да, свойство UserId в двух моделях имеет идентичные имена - поскольку они являются одним и тем же свойством домена.
Когда я перехожу на страницу, заполненный UserId на виртуальной машине вставляется в ОБА поля формы с именем UserId byMVC. Даже sm.UserId пусты.
Это моя первоначальная проблема. Есть несколько способов избежать этого. Моим решением было использовать флаг Prefix для sm.
[HttpGet]
public ActionResult Search([Bind(Prefix = "Search")] SearchFormViewModel searchFormViewModel, PagingViewModel pagingViewModel)
{
Это побудит MVC отобразить Search.UserId для имени поля в форме поиска, но свойство в коде все равно будет называться UserId.
Это решение, кажется, прекрасно работает!
НО: теперь мне нужно обратиться к search.UserId по маршруту из Global.asax. Я отображаю маршрут следующим образом:
routes.MapRoute(
"MyRouteName",
"ControllerName/User/{Search.UserId}",
new { controller = "ControllerName", action = "Search" }
);
Моя проблема в том, что MVC не может сопоставить Search.UserId (потому чтоиз.), чтобы соответствовать UserId (с префиксом Search) в действии, показанном выше.
Так что, похоже, MVC имеет функцию префикса, которая на самом деле полностью поддерживается nok через Route-handler.
Ofcourse, я мог бы переименовать Search.UserId в Search_UserId, но затем имя, не совпадающее с именем, которое MVC ожидает в действии получения выше.(ожидает Search.UserId) Переименование Свойство UserId модели поиска решит проблему, но, поскольку оно имеет то же значение в домене, это выглядит как обходной путь.
Я что-то здесь упустил из-за использованияфункции префикса или это просто невозможно?