MVC控制器和视图应该具有1对1的关系吗?

时间:2009-11-04 11:46:17

标签: asp.net asp.net-mvc

我目前正在使用asp.NET MVC来构建网站的内容管理系统部分,并且有可能将我的所有视图重新创建为部分视图,因为它似乎打破了网站地图的工作方式。

例如,我的FAQAdminController有Views:Index,AddFAQ,EditFAQ,ConfirmDeleteFAQ,这些都必须成为部分视图。

我被告知每个控制器应该有一个视图,并且要显示的页面内容中的所有其他表单或操作应该作为部分视图实现。

我在发布之前已经检查过,没有任何文档,文章,维基或SO问题可以直接回答每个控制器的多个视图是否打破了MVC模型。

严格来说,MVC Controller和View应该是1对1关系吗?

4 个答案:

答案 0 :(得分:15)

  

我被告知每个控制器应该有一个视图,并且要显示的页面内容中的所有其他表单或操作应该作为部分视图实现。

那是胡说八道。

  

严格来说,MVC Controller和View应该是1对1关系吗?

绝对不是。以合理且一致的方式设计您的应用程序。

控制器通常会处理许多操作并返回许多不同的视图。您可以考虑使用FAQController来呈现用户和管理员的所有视图。

答案 1 :(得分:9)

我认为这违背了MVC的目的。因为控制器应该能够决定使用哪个视图来呈现模型。

答案 2 :(得分:2)

MVC Controller应该能够支持多个View。

答案 3 :(得分:1)

MVC控制器可以而且应该支持多个视图。使单个控制器支持的视图与同一业务对象或进程相关是有帮助的。

考虑以下示例

public class ExampleController : Controller
{
    public ActionResult Index()
    {
            //get list of objects
            return View(); // uses a view called Index
    }

    public ActionResult Edit(string id)
    {
            Object target = ObjectManager.GetObject(id);
            if (target == null)
            {
                    return New();//view for creating a record
            }
            else
            {
                    ViewData.Add("detail", target);
                    return View("Detail");//using a view not name-mapped to controller method name
            }
    }

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

}
相关问题