20

我的项目结构是这样的:

  • 控制器/ArticlesController.cs
  • 控制器/评论Controller.cs
  • 视图/文章/Read.aspx

read.aspx 带一个参数say“output”,是文章的详细信息,通过id和评论,从ArticlesController.cs

现在我想写然后阅读评论:: write()& Read()funct inCommentsController.cs

为了阅读带有评论的文章,​​我想通过传递输出参数来调用Views/Articles/Read.aspxfromCommentsController.csCommentsController.cs

我怎样才能做到这一点?

更新

代码在这里:

public class CommentsController : AppController
{
    public ActionResult write()
    {
        //some code
        commentRepository.Add(comment);
        commentRepository.Save();

        //works fine till here, Data saved in db
        return RedirectToAction("Read", new { article = comment.article_id });
    }

    public ActionResult Read(int article)
    {   
        ArticleRepository ar = new ArticleRepository();
        var output = ar.Find(article);

        //Now I want to redirect to Articles/Read.aspx with output parameter.
        return View("Articles/Read", new { article = comment.article_id });
    }
}

public class ArticlesController : AppController
{   
    public ActionResult Read(int article)
    {
        var output = articleRepository.Find(article);

        //This Displays article data in Articles/Read.aspx
        return View(output);
    }
}
4

4 回答 4

58

如果要返回属于另一个控制器的视图,要直接回答您的问题,您只需指定视图的名称及其文件夹名称。

public class CommentsController : Controller
{
    public ActionResult Index()
    { 
        return View("../Articles/Index", model );
    }
}

public class ArticlesController : Controller
{
    public ActionResult Index()
    { 
        return View();
    }
}

此外,您正在谈论在另一个控制器中使用读取和写入方法。我认为您应该通过模型直接访问这些方法,而不是调用另一个控制器,因为另一个控制器可能返回 html。

于 2012-08-02T06:46:45.720 回答
2

您可以将 read.aspx 视图移动到共享文件夹。在这种情况下,这是标准方式

于 2012-08-02T07:22:17.343 回答
0

我不确定你的问题是否正确。也许像

public class CommentsController : Controller
{
    [HttpPost]
    public ActionResult WriteComment(CommentModel comment)
    {
        // Do the basic model validation and other stuff
        try
        {
            if (ModelState.IsValid )
            {
                 // Insert the model to database like:
                 db.Comments.Add(comment);
                 db.SaveChanges();

                 // Pass the comment's article id to the read action
                 return RedirectToAction("Read", "Articles", new {id = comment.ArticleID});
            }
        }
        catch ( Exception e )
        {
             throw e;
        }
        // Something went wrong
        return View(comment);

    }
}


public class ArticlesController : Controller
{
    // id is the id of the article
    public ActionResult Read(int id)
    {
        // Get the article from database by id
        var model = db.Articles.Find(id);
        // Return the view
        return View(model);
    }
}
于 2012-08-02T07:11:01.480 回答
0

这里解释得很好:Display a view from another controller in ASP.NET MVC

引用@Womp
默认情况下,ASP.NET MVC 首先签入\Views\[Controller_Dir]\,但之后,如果找不到视图,它会签入\Views\Shared.

ASP MVC 的想法是“约定优于配置”,这意味着在这种情况下将视图移动到共享文件夹是可行的方法。

于 2020-07-14T12:11:42.513 回答