У меня есть действие, которое я вызываю от якоря, таким образом, Site/Controller/Action/ID
где ID
есть int
.
Позже мне нужно перенаправить на это же действие из контроллера.
Есть ли умный способ сделать это? В настоящее время я коплю ID
в tempdata, но когда вы нажимаете клавишу f5, чтобы обновить страницу после возвращения, tempdata исчезает и страница падает.
c#
asp.net-mvc
controller
redirecttoaction
Эрик Браун - Кэл
источник
источник
Return RedirectToAction("Action", "Controller", New With {.id = 99})
Ответ Курта должен быть правильным из моих исследований, но когда я попробовал его, мне пришлось сделать это, чтобы заставить его работать на меня:
Если я не указал контроллер и действие в
RouteValueDictionary
нем не сработало.Также при таком кодировании первый параметр (Action), кажется, игнорируется. Так что, если вы просто указываете контроллер в Dict и ожидаете, что первый параметр будет указывать Action, он тоже не будет работать.
Если вы приедете позже, сначала попробуйте ответить Курту, а если у вас все еще есть проблемы, попробуйте этот.
источник
controller
параметр является необязательным, если действие перенаправления находится в том же контроллере, что и действие, из которого вы перенаправляете.RedirectToAction
с параметром:источник
new {id = id}
работает так же хорошо, потому что фреймворк знает, на какую переменную вы ссылаетесь.Также стоит отметить, что вы можете пройти более 1 параметра. id будет использоваться для создания части URL, а любые другие будут передаваться в качестве параметров после символа? в URL и будет UrlEncoded по умолчанию.
например
Таким образом, URL будет:
На них может ссылаться ваш контроллер:
источник
пример
источник
MVC 4 пример ...
Обратите внимание, что вам не всегда нужно передавать параметр с именем ID
А также,
Конечно, вы можете назначить строку для полей модели вместо использования ViewBag, если это ваше предпочтение.
источник
Если ваш параметр оказывается сложным объектом, это решает проблему . Ключ
RouteValueDictionary
конструктор.Если у вас есть коллекции, это немного усложняет задачу, но этот другой ответ очень хорошо освещает эту проблему .
источник
Работал на меня, не нужно было делать
new{id = id}
Я перенаправлял на тот же контроллер, поэтому мне не нужно было,
"Controller"
но я не уверен в конкретной логике, когда контроллер требуется в качестве параметра.источник
RedirectToAction("Action", "Controller", new { id = id});
было именно то, что мне было нужно в моем приложении Core 3.1.Если кто-то хочет показать сообщение об ошибке,
[httppost]
то он / она может попробовать, передав идентификатор с помощьюдля деталей, как это
Надеюсь, это работает нормально.
источник
....
....
источник
У меня также была эта проблема, и довольно хороший способ сделать это, если вы находитесь в одном контроллере, это использовать именованные параметры:
источник
Это может быть несколько лет назад, но в любом случае это также зависит от маршрута вашей карты Global.asax, поскольку вы можете добавлять или редактировать параметры в соответствии с вашими потребностями.
например.
Global.asax
тогда параметры, которые вам нужно будет передать, изменится на:
источник
Если вам нужно перенаправить на действие за пределами контроллера, это будет работать.
источник
Следующее успешно с ядром asp.net 2.1. Это может применяться в другом месте. Словарь ControllerBase.ControllerContext.RouteData.Values напрямую доступен и доступен для записи из метода действия. Возможно, это конечный пункт назначения данных в других решениях. Он также показывает, откуда берутся данные маршрутизации по умолчанию.
источник