#c# #asp.net-mvc
#c# #asp.net-mvc
Вопрос:
Я просматривал, пытаясь найти какой-нибудь способ перенаправить на Index
представление с другого контроллера.
public ActionResult Index()
{
ApplicationController viewModel = new ApplicationController();
return RedirectToAction("Index", viewModel);
}
Это то, что я пробовал прямо сейчас. Теперь код, который мне дали, имеет ActionLink
ссылку на страницу, которая мне Redirect
тоже нужна.
@Html.ActionLink("Bally Applications","../Application")
Ответ №1:
Используйте перегрузки, которые также принимают имя контроллера…
return RedirectToAction("Index", "MyController");
и
@Html.ActionLink("Link Name","Index", "MyController", null, null)
Комментарии:
1. Хорошо, это сработало. Я пробовал это раньше, должно быть, была опечатка, когда я делал это раньше.
2. это было бы раньше, но меня останавливал таймер
3. Ах, для нас, новичков в MVC, это было чрезвычайно полезно. Я просто перенаправлял на другое представление в другую папку, представленную другим контроллером, пока не прочитал это.
4. как перенаправить на представление без контроллера? например
Shared/Error
Ответ №2:
попробуйте:
public ActionResult Index() {
return RedirectToAction("actionName");
// or
return RedirectToAction("actionName", "controllerName");
// or
return RedirectToAction("actionName", "controllerName", new {/* routeValues, for example: */ id = 5 });
}
и в .cshtml
поле зрения:
@Html.ActionLink("linkText","actionName")
или:
@Html.ActionLink("linkText","actionName","controllerName")
или:
@Html.ActionLink("linkText", "actionName", "controllerName",
new { /* routeValues forexample: id = 6 or leave blank or use null */ },
new { /* htmlAttributes forexample: @class = "my-class" or leave blank or use null */ })
Обратите внимание, что использование null
в конечном выражении не рекомендуется, и лучше использовать пробел new {}
вместо null
Комментарии:
1. Что касается вашего уведомления, по какой причине его лучше использовать
new {}
вместоnull
?
Ответ №3:
Вы можете использовать следующий код:
return RedirectToAction("Index", "Home");
См. RedirectToAction
Комментарии:
1. Я попробовал это, и это не сработало. Это дало мне ошибку page не удалось найти
2. должно быть с «Контроллером»:
return RedirectToAction("Index", "Home");
3. Мне нужно использовать «/ Index», иначе не найден
4. @code4j как вы определили свои маршруты по умолчанию? Вы добавили значения по умолчанию для контроллера и действия?
Ответ №4:
Вы можете использовать метод overloads RedirectToAction(string actionName, string controllerName);
Пример:
RedirectToAction(nameof(HomeController.Index), "Home");
Ответ №5:
Вы можете использовать локальное перенаправление. Следующие коды переходят на страницу индекса HomeController:
public class SharedController : Controller
{
// GET: /<controller>/
public IActionResult _Layout(string btnLogout)
{
if (btnLogout != null)
{
return LocalRedirect("~/Index");
}
return View();
}
}
Ответ №6:
Полный ответ (.Net Core 3.1)
Большинство ответов здесь правильные, но взяты немного из контекста, поэтому я предоставлю полноценный ответ, который работает для Asp.Net Ядро 3.1. Для полноты картины:
[Route("health")]
[ApiController]
public class HealthController : Controller
{
[HttpGet("some_health_url")]
public ActionResult SomeHealthMethod() {}
}
[Route("v2")]
[ApiController]
public class V2Controller : Controller
{
[HttpGet("some_url")]
public ActionResult SomeV2Method()
{
return RedirectToAction("SomeHealthMethod", "Health"); // omit "Controller"
}
}
Если вы попытаетесь использовать любую из строк, специфичных для url, например "some_health_url"
, это не сработает!
Ответ №7:
Помощники тегов:
<a asp-controller="OtherController" asp-action="Index" class="btn btn-primary"> Back to Other Controller View </a>
В controller.cs есть метод:
public async Task<IActionResult> Index()
{
ViewBag.Title = "Titles";
return View(await Your_Model or Service method);
}
Ответ №8:
RedirectToRoute() — еще один вариант. Просто передайте маршрут в качестве аргумента. Кроме того, использование nameof() может быть лучшим соглашением, поскольку вы не жестко кодируете имя контроллера в виде строки.
return RedirectToRoute(nameof(HomeController) nameof(HomeController.Index));