【问题标题】:ASP.NET MVC Using different controllers in single viewASP.NET MVC 在单个视图中使用不同的控制器
【发布时间】:2014-06-20 10:28:46
【问题描述】:

我是 ASP.NET MVC 的新手,我发现一些 MVC 模式存在问题。 范式 One controller -> One View 非常清楚,但在一个复杂的场景中,我有一个向导页面,在该页面的每一步我都为不同的模型收集数据,我找不到一个直接而简单的解决方案。

示例: 我有这 3 个模型:Student、Subject、Subscription

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

  1. 要求选择现有学生或创建新学生
  2. 要求选择现有主题或创建新主题
  3. 要求输入一些其他数据(开始日期、结束日期、付款等)

此向导在 Subscription/Create 视图中,并且正在使用带有一些 ViewBag 数据的 Subscription 模型。

我怎样才能做到这一点?

最好将所有内容发布到单个控制器操作并在所涉及的每个模型中调用插入?还是在每个步骤中将数据发布到正确的 Action 更好?

【问题讨论】:

  • 这里有两个选项 - 使用 一个 视图并使用 JavaScript 显示和隐藏向导的某些部分,或者使用多个视图和多个控制器操作。

标签: asp.net-mvc


【解决方案1】:

如果您为此使用 jQuery,那么实际上您只需要一个视图模型。该单个视图模型将包含您打算从用户那里收集的所有内容的属性,例如

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 可以对 Subscriptions 控制器进行 Ajax POST 调用,例如

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

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

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

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

【讨论】:

    猜你喜欢
    • 2021-09-05
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    • 1970-01-01
    相关资源
    最近更新 更多