Asp.net mvc 在MVC中创建向导窗体以及如何管理视图和控制器文件夹

Asp.net mvc 在MVC中创建向导窗体以及如何管理视图和控制器文件夹,asp.net-mvc,model-view-controller,forms,asp.net-mvc-2,wizard,Asp.net Mvc,Model View Controller,Forms,Asp.net Mvc 2,Wizard,我需要制作一个包含3个步骤的表单向导。每个步骤都可以单独保存在数据库中。步骤是输入有关公司的信息,然后是他的出版物,最后是他的预订 我应该将所有逻辑放在一个控制器还是不同的控制器中?我的第一个想法是在一个控制器中,因为这都是关于管理一家公司的,但问题是,在控制器和视图文件夹中,我会有很多代码,我会有20个网页 有没有办法将子文件夹放在View\companys\folder中,这样我就可以查看\companyes\Publications了。这样,我可以为每个主题分离网页 或者你是怎么做到的?有

我需要制作一个包含3个步骤的表单向导。每个步骤都可以单独保存在数据库中。步骤是输入有关公司的信息,然后是他的出版物,最后是他的预订

我应该将所有逻辑放在一个控制器还是不同的控制器中?我的第一个想法是在一个控制器中,因为这都是关于管理一家公司的,但问题是,在控制器和视图文件夹中,我会有很多代码,我会有20个网页

有没有办法将子文件夹放在View\companys\folder中,这样我就可以查看\companyes\Publications了。这样,我可以为每个主题分离网页

或者你是怎么做到的?有没有更好的方法来正确处理向导表单


alex取决于模型。如果您的发布是它们自己的实体,并且它们最终被存储(在DB中)在它们自己的表中,那么它们拥有自己的控制器可能是正确的方法。保留意见也一样。如果您将这两者都存储为公司实体的一部分,那么它们最好留在公司控制器中。但在我看来,他们应该分开

关于控制器操作之间的重定向,您始终可以使用RedirectToAction()在同一控制器内重定向

您还可以使用MVC Futures project及其RedirectToAction()扩展,通过这些扩展,您还可以在不同的控制器之间重定向

FWIW,我认为如果您正在编辑具有自己属性等的出版物,则该出版物属于他们自己的实体,因此他们需要有自己的模型、控制器和后续视图(在视图根目录下的单独视图文件夹中)

更新:

这样的路线有什么问题:

为具有{companyId}的公司创建发布

/Publication/Create/{companyId}
/Publication/Edit/{companyId}/{publicationId}

编辑id为{publicationId}的出版物和为id为{companyId}的公司编辑出版物

/Publication/Create/{companyId}
/Publication/Edit/{companyId}/{publicationId}
或者如果发布ID是唯一的,无论公司如何

/Publication/Edit/{publicationId}

抱歉,刚刚发现RedirectToAction()扩展在MVC Contrib中,而不是在MVC Futures中。嗯,如果你没有先选择公司,你就不能去看出版物。但这本书有自己的逻辑,所以也许可以分开。我可以在我的解决方案中执行类似操作吗:Project/Controllers/companys/companyescontroller.cs、Project/Controllers/companys/Publications/Publications/Publications/Publications controller.cs、Project/Views/companys/Index.aspx、Project/Views/companys/Publications/Index.aspx。url可以是:localhost/companys,localhost/companys/1/publications我想你可以,但我不喜欢。这使结构复杂化了。阻止进入出版物编辑器可以通过检查路线数据(检查路线数据中的公司ID是否为空)或通过在会话中存储选定的公司(即公司ID)或您可能想到的任何其他方式来完成。我想这样做的原因是因为我没有管理出版物。我管理的公司都有出版物。如果有一天客户需要管理发布,我将执行/Publication/Edit/。也许你也是对的。我不确定我会做什么:)按照你的意愿去做,但你很快就会发现,在使用ASP.NET MVC时,你必须改变你的想法。您不是管理具有出版物的公司,而是始终为特定公司管理特定出版物。它非常适合您的需求,因为您可以随时检查是否提供了{companyId}参数。而且它在设计上更简单。很抱歉。。。我刚刚接受了你的回答!我在度假