2015-11-16 1 views
0

Ни в одном из моих методов действий в контроллере не работает RedirectToAction("Index"). Но в других контроллерах работает RedirectToAction(Index). Когда я укажу URL-адрес: Localhost:ControllerName он не перенаправлен и дает мне страницу с сообщением об ошибкеПереадресация на указатель/Навигация по макете без загрузки страницы

Ресурс не найден.

Я не могу перейти на индексную страницу только с именем контроллера. Я также пробовал RedirectToAction("Index","ControllerName"), который тоже не работает.

У меня есть аналогичная вещь в других моих контроллерах. Название моего COntroller - ViewsController. это повлияет на работу моего Redirect?

Index

public ActionResult Index() 
{ 
    return View(db.Views.ToList()); 
} 

Создание RedirectToAction порога называется

public ActionResult Create([Bind(Include = "ViewsID,ViewsName,DescriptionEN,DescriptionDE")] Views views) 
{ 
    if (ModelState.IsValid) 
    { 
      db.Views.Add(views); 
      db.SaveChanges(); 
      return RedirectToAction("Index","Views"); 
    } 

    return View(views); 
} 

Даже в моем макете

@Html.ActionLink("Views", "Index", "Views")

не работает.

Что вызывает перенаправление, чтобы не функционировать. Я полагаю, что с моим RouteConfig проблем нет, потому что аналогичные перенаправления в других контроллерах работают

ответ

3

Это каскадная проблема и, на мой взгляд, не стоит хлопот. Views - это папка в вашем проекте, содержащая все ваши файлы .cshtml. Используя ViewsController, вы теперь назначаете ему маршрут mvc, что означает, что он находится в конфликте с уже назначенным маршрутом.

Проблема в том, что есть специальный обработчик, который мешает вам переходить сюда в Views/web.config.

<system.webServer> 
    <handlers> 
    <remove name="BlockViewHandler"/> 
    <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" /> 
    </handlers> 
</system.webServer> 

Все, что нам нужно сделать, это удалить это право? Неправильно. Физические файлы отображаются перед маршрутами MVC. Таким образом, вы (по умолчанию) получите хороший 403 Forbidden, потому что вы пытаетесь открыть каталог.

Чтобы обойти это, вы можете использовать опцию RouteExistingFiles в вашем файле Route.config.

routes.RouteExistingFiles = true; 
routes.MapRoute(...); 

У этого есть побочный эффект игнорирования любых физических файлов, которые вы, возможно, хотите проложить. Но эй, по крайней мере, сейчас это работает.

Заключение: просто переименуйте свой контроллер. Это менее болезненно.

+0

Да. Я уже изменил имя своего контроллера. Он решил проблему. – Vini

Смежные вопросы