代码之家  ›  专栏  ›  技术社区  ›  StuperUser

MVC控制器和视图是否应具有1对1关系?

  •  10
  • StuperUser  · 技术社区  · 16 年前

    我目前正在使用ASP.NET MVC来构建一个网站的内容管理系统部分,并且有一项令人讨厌的工作,即将我的所有视图重新创建为部分视图,因为它似乎正在破坏网站图的工作方式。

    例如,我的faqadmincontroller具有以下视图:index、addfaq、editfaq、confirmdeletefaq,这些视图必须成为部分视图。

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

    我在发布之前已经检查过了,没有文档、文章、维基之类的问题能给我一个关于每个控制器是否有多个视图会破坏MVC模型的直接答案。

    严格地说,MVC控制器和视图应该有1对1的关系吗?

    4 回复  |  直到 13 年前
        1
  •  15
  •   user151323    16 年前

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

    那是胡说。

    严格地说,MVC控制器和视图应该有1对1的关系吗?

    绝对不是。以逻辑和一致的方式设计应用程序。

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

        2
  •  9
  •   TheVillageIdiot    16 年前

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

        3
  •  2
  •   Anwar Chandra    16 年前

    MVC控制器应该能够支持多个视图。

        4
  •  1
  •   Mike    16 年前

    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();  
        }
    
    }
    
    推荐文章