在更新C#MVC 2.0应用程序的过程中!
我有一个“注册”视图和另一个视图“ForgotPassword”。
每个视图都有一个提交按钮。
每个表单都提交给 相同的 控制器,但提交给两个不同的ActionResult:
[HttpPost]
public ActionResult Signup(SignupModel signupModel)
{…}
[HttpPost]
public ActionResult ForgotPwd(ForgotPasswordModel forgotPasswordModel)
{…}
完成后我的目标是将用户重定向到“thankyou”页面,但根据用户来自哪里(Signup或ForgotPassword)我希望显示特定消息(或不同的UI)。
在同一个Controller中,我创建了一个“Thankyou”ActionResult:
public ViewResult Thankyou()
{
return View();
}
我正在考虑在我的Thankyou()方法中添加参数,这样我就可以知道用户来自哪里(Signup或ForgotPwd)。从那里,让“thankyou”页面显示相应的UI /消息。
我正在寻找一个干净简单的解决方案。
我应该创建两个View User Controls并根据传递的参数显示适当的一个吗?
另外,我的Thankyou()方法没有使用“ActionResult”而不能使用“PartialViewResult”?
编辑: 我实际上正在考虑这些方面的事情......
其中ThankyouType
是枚举。
[HttpPost]
public ActionResult Signup(SignupModel signupModel)
{
//Validation code...
return View("Thankyou", ThankyouType.SignupDone);
}
[HttpPost]
public ActionResult ForgotPassword(ForgotPasswordModel forgotPasswordModel)
{
//Validation code...
return View("Thankyou", ThankyouType.ForgotPasswordDone);
}
然后让我的“Thankyou”ViewResult像这样:
public ViewResult Thankyou(ThankyouType type)
{
return View(type);
}
似乎我不能创建基于Enum的强类型视图(除非我错了)。
也许我会在PartialViewResults上阅读更多内容和/或找到示例......但话又说回来,我可能完全错了。
答案 0 :(得分:1)
我个人会向ThankYou视图提供一个包含您要显示的消息的模型,并让您的两个控制器操作直接在成功时呈现ThankYou视图,而不是调用ThankYou操作。
但是,如果您确定要重定向,可以考虑使用TempData
集合来存储消息或某种密钥。然后,ThankYou控制器可以检索此值并将其传递给View。这种情况是TempData
的用途。
没有理由你不能使用枚举值作为模型类型,但如果这给你带来麻烦,你至少应该能够创建一个具有枚举属性的模型类型。
作为重定向请求的一部分发送ThankYouType的策略可以正常工作,如果这是你喜欢的。唯一可能的缺点是它在URL中看起来像这样:
http://domain.com/controller/ThankYou?type=ForgotPasswordDone
我没有反对它的真实论据。有很多选择。使用最适合你的那个。