ASP.NET MVC在单个视图中使用不同的控制器

时间:2014-06-20 10:28:47

标签: asp.net-mvc

我是ASP.NET MVC的新手,我发现一些MVC模式存在问题。 很明显范式一个控制器 - > One View,但是在一个复杂的场景中,我有一个向导页面,我在每个步骤收集不同模型的数据,我找不到简单明了的解决方案。

实施例: 我有这3个模型:学生,主题,订阅

我想创建一个jquery向导页面以这种方式创建订阅:

  1. 要求选择现有学生或创建新学生
  2. 要求选择现有主题或创建新主题
  3. 要求输入其他一些数据(日期开始,日期结束,付款等)
  4. 此向导在订阅/创建中,并且正在使用包含一些ViewBag数据的订阅模型。

    我怎样才能实现这个目标?

    最好将所有内容发布到单个控制器操作并在所涉及的每个模型中调用插入?或者更好地将每一步的数据发布到正确的行动?

2 个答案:

答案 0 :(得分:0)

如果您正在使用jQuery,那么实际上您只需要一个视图模型。该单个视图模型将包含您打算从用户收集的eveything的属性,例如

public class SubscriptionCreateViewModel
{
    // Fields from page 1 of the wizard.
    public string Username { get; set;}

    // Fields from page 2 of the wizard.
    public string Foo { get; set;}

    // etc.
}

当用户在向导的最后一步点击Create(或其他)时,jQuery可以对订阅控制器进行Ajax POST调用,例如

$.ajax({
    type: 'POST',
    url: 'url to controller',
    data : { Username : 'UserName', Foo : 'foo' }
});

[HttpPost]
public ActionResult Create(SubscriptionCreateViewModel viewModel)
{
    // Do whatever.
}

这意味着所有字段都显示在同一视图中,但是根据当前向导步骤,某些JavaScript会更改显示给用户的字段。

如果您使用单独的视图,那么我建议您使用三个控制器和三个视图模型,每个控制器一个(StudentControllerStundentCreateViewModelSubjectController等等)

答案 1 :(得分:0)

如果您将每个步骤发布到服务器,您可以使用单独的操作,但如果您在单击完成按钮后发布整个向导,则将所有模型放入ViewModel并将ViewModel发回到单个Action以插入数据作为Jason埃文斯说。