2014-09-20 2 views
0

У меня есть этот контроллер:Html.Action неправильное поведение

public class PostController : Controller 
{ 
    public ActionResult SimplePost(PostData postData, bool isRichView = true) 
    { 
     ViewBag.IsRichView = isRichView; 
     return View(postData); 
    } 

    public ActionResult VideoPost(PostData postData, bool isRichView = true) 
    { 
     ViewBag.IsRichView = isRichView; 
     return View(postData); 
    } 

    public ActionResult Post(PostData postData, bool isRichView = true) 
    { 
     switch (postData.PostType) 
     { 
      case PostType.SimplePost: 
       return SimplePost(postData, isRichView); 
      case PostType.VideoPost: 
       return VideoPost(postData, isRichView); 
      default: 
       throw new InvalidDataException("There is no post shell for this kind of post!"); 
     } 
    } 
} 

И в другом месте, я называю это:

foreach (var postData in RepositoryManager.PostRepository.GetList()) 
{ 
    @Html.Action("Post", "Post", new {postData}) //Call Post method 
} 

Так после этого я получаю сообщение об ошибке: Не удалось найти представление «Post "или образец, или просмотр обработчика не поддерживает поиск. Искал в следующих местах:

~/Views/Post/Post.aspx 
~/Views/Post/Post.ascx 
~/Views/Shared/Post.aspx 
~/Views/Shared/Post.ascx 
~/Views/Post/Post.cshtml 
~/Views/Post/Post.vbhtml 
~/Views/Shared/Post.cshtml 
~/Views/Shared/Post.vbhtml 

(примерно перевод с моего языка на английском языке).

Но почему это происходит?

Я называю View from SimplePost и методы VideoPost, почему он пытается найти «сообщение»?

ответ

1

MVC знает, что действие Post является exetcuting. Когда вы выполняете действие подобно методу, он ничего не меняет, как этот код был в действии Post. MVC не сообщает, что выполняется другое действие. Вам нужно добавить имя вида в свои действия, чтобы сообщить MVC, который просматривает рендер:

... 
public ActionResult SimplePost(PostData postData, bool isRichView = true) 
{ 
    ViewBag.IsRichView = isRichView; 
    return View("SimplePost", postData); 
} 
public ActionResult VideoPost(PostData postData, bool isRichView = true) 
{ 
    ViewBag.IsRichView = isRichView; 
    return View("VideoPost", postData); 
} 
... 
Смежные вопросы