ASP.NET MVC 2中相同操作的不同视图 - 我应该继承控制器吗?

时间:2011-03-16 16:10:00

标签: asp.net-mvc asp.net-mvc-2

美好的一天!

我有一个应用程序,我需要显示和处理具有两个不同HTML的表单 - 一个用于具有站点范围主页的普通页面,另一个用于包含不同设计设计(HTML代码)和其他母版页的iframe

现在我的控制器有一些正常页面的动作和视图,是时候创建iframe版本了。表单字段,验证和处理是相同的,所以我想让它尽可能干。

是否可以继承控制器(不添加任何新内容)以创建新视图?

namespace MyControllers
{
    public class SomeController : BaseController
    {
        [HttpGet]
        public ActionResult ProcessMyForm()
        {
            ...
        }

        [HttpPost]
        public ActionResult ProcessMyForm(FormCollection form)
        {
            ...
        }       
    }
}

观看次数将在/Views/MyController

namespace MyControllers
{
    public class SomeControllerWithDifferentViews : SomeController
    {
        // nothing here
    }
}

不同的观点将在/Views/SomeControllerWithDifferentViews

有意义吗?

3 个答案:

答案 0 :(得分:5)

您可以尝试将查询参数传递给ActionResult处理程序,以了解要提供的视图。

[HttpPost]
public ActionResult ProcessMyForm(FormCollection form, bool isIFrame)
{
  ...snip...

  if (isIFrame)
  {
    return View ('MyFormIFrame')
  }
  else
  {
    return View ('MyForm');
  }
}

如果您想将不同的路线映射到此处理程序,您可以执行以下操作

routes.MapRoute ("MyForm", "/mycontroller/action", new
{
  Controller = "mycontroller",
  Action = "ProcessMyForm",
  isIFrame = false,
});


routes.MapRoute ("MyFormIFrame", "/mycontroller/action-iframe", new
{
  Controller = "mycontroller",
  Action = "ProcessMyForm",
  isIFrame = true,
});

答案 1 :(得分:1)

  

是否可以继承控制器(不添加任何新内容)   能够创建新视图吗?

是的,是的。

但是,请记住,在ASP.NET MVC中,视图和控制器没有绑在一起。您可以让两个完全不同的控制器提供相同的视图(只要将正确的ViewModel传递给视图)。这意味着您不一定需要从同一个控制器继承才能使用来自多个控制器的视图。你可以,如果它有意义,但你没有。

答案 2 :(得分:0)

是的,这在使用默认视图引擎时应该有效,假设您有基本和派生控制器类型的视图文件。