2016-11-08 3 views
0

У меня есть следующие действия:Действие не находит View или своего хозяина

public class ArticlesController : Controller 
{ 

    public ActionResult Article01() 
    { 
     return View(); 
    } 
} 

который возвращает вид, и все, кажется, работает хорошо.

Теперь я пытаюсь добавить ActionName:

[ActionName("bla-bla-article-1")] 
    public ActionResult Article01() 
    { 
     return View(); 
    } 

Теперь телефону:/Статья/Article01 возвращает

'Ресурс не может быть найден.

Сейчас я стараюсь это:

[ActionName("bla-bla-article-1")] 
public ActionResult Article01() 
{ 
    return View("~/Content/Views/Articles/Article01.cshtml"); 
} 

И вот я получаю:

Вид '~/Content/Views/Статьи/Article01.cshtml' или его хозяин не найденный или отсутствующий механизм просмотра поддерживает найденные местоположения. Поиск проводился по следующим местам: ~/Content/Просмотров/Статьи/Articles01.cshtml

+0

ваше действие будет на URL '/ статьи/бла-бла-статью-1' не'/Статьи/Article01 ' – Liam

+0

Ваша вторая ошибка говорит, что вид не существует. Если ваш контроллер называется 'Article', вы смотрите в папку ** ** ** (множественное число) статьи, которая, вероятно, ваша проблема – Liam

+0

В принципе' return View ("~/Content/Views/Article/Article01.cshtml"); 'should почини это – Liam

ответ

1

Вы должны понимать, что по умолчанию имя методы также имя действия. Но, как только вы переопределяете это соглашение, используя атрибут [ActionName], Url, через который вы получаете доступ к действию, также может быть изменен.

В вашем случае, вероятно, будет:

/Статьи/бла-бла-статья-1

И, когда вы используете return View() без указания имени вида, это время автоматически определяется из текущих параметров маршрута, и после применения вашего атрибута значение будет bla-bla-article-1.

Вот почему вы должны указать его в явном виде:

return View("Article01"); 

См MSDN

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