C# ASP.NET MVC 3.0中的状态模式
我的申请表上有注册页。它有3个状态和1个错误状态(如果出现任何错误):C# ASP.NET MVC 3.0中的状态模式,c#,asp.net-mvc,asp.net-mvc-3,design-patterns,state-pattern,C#,Asp.net Mvc,Asp.net Mvc 3,Design Patterns,State Pattern,我的申请表上有注册页。它有3个状态和1个错误状态(如果出现任何错误): 填写基本信息 选择包 说谢谢 错误 现在我想在这里使用状态模式。首先,我创建了一个控制台应用程序。现在我想在我的MVC应用程序中实现这个逻辑,但是我对它的结构感到困惑。我指的是我需要多少视图、模型和控制器,以及在哪里放置逻辑。1个控制器:注册控制器 6种行动方法: 获取+发布索引(填写基本信息) 获取+邮寄包裹 去拿吧,谢谢 找错 这是一个粗略的代码,可以让你的大脑运转起来: public class Registrat
现在我想在这里使用状态模式。首先,我创建了一个控制台应用程序。现在我想在我的MVC应用程序中实现这个逻辑,但是我对它的结构感到困惑。我指的是我需要多少视图、模型和控制器,以及在哪里放置逻辑。1个控制器:
注册控制器
6种行动方法:
- 获取+发布索引(填写基本信息)
- 获取+邮寄包裹
- 去拿吧,谢谢
- 找错
public class RegistrationController : Controller
{
public ActionResult Index()
{
RegistrationState model = RegistrationState.Init();
// just display the "Fill Basic Info" form
return View(model);
}
[HttpPost]
public ActionResult Index(RegistrationState data)
{
// process data and redirect to next step
this.TempData["RegState"] = data;
if (!this.ModelState.IsValid || data.State == State.Error)
{
// error should handle provided state and empty one as well
return RedirectToAction("Error");
}
return RedirectToAction("Package");
}
public ActionResult Package()
{
RegistrationState data = this.TempData["RegState"] as RegistrationState;
if (data == null)
{
return RedirectToAction("Error");
}
// get packages and display them
IList<Package> model = this.repository.GetPackages();
return View(new Tuple.Create(data, model));
}
[HttpPost]
public ActionResult Package(RegistrationState data)
{
// process data blah blah blah
}
// and so on and so forth
....
}
因此,ControllerFactory能够将视图数据解析为已知的状态对象类型,并将执行传递给特定的操作。据国家统计。这将使它成为一个特别适合Asp.NETMVC应用程序的状态机
当然,更重要的问题是,您是否可以使用此模式创建整个应用程序,或者只是其中的某些部分应该像这样工作。当然,您可以将这两种方法结合起来,并为每种方法提供适当的路由
重要通知
我认为你把美国搞糊涂了。国家安全的例子有:
谢谢你,罗伯特。但我对观点还有一个疑问。这里需要多少视图1或4?@共享:总共4个视图。每个州一个。但是你应该查看一些Asp.NETMVC介绍视频,让你明白这一点。Asp.net MVC的学习曲线非常短,因为它非常简单和纯粹,所以您不需要花费太长的时间来了解它,从而使它能够正常工作。这也会让你明白为什么每个州都需要一个视图。我想你知道Asp.NETWebForms,因为很可能只有一个aspx页面来处理所有这些…@Sharad:我对我的答案进行了一些编辑,因为你实际上只需要6个动作方法,而不是我第一次写的8个。但是你确实需要4个视图。@Sharad:我在我的回答中添加了一些重要信息,让你退一步,从开发人员和可维护性的角度考虑你的方法。谢谢Robert。这对我非常有用。他显然有两种注册状态,因为他希望注册过程分为两步。我的假设是,如果不选择包,注册就无法完成:)
{StateObjectType}/{State}