Asp.net mvc 基于ViewModel的控制器动作重用
我将在我的网站上有一份登记表,首先显示董事会规则/法律。一旦接受,它将显示主登记表。使用ViewModel,如下所示:Asp.net mvc 基于ViewModel的控制器动作重用,asp.net-mvc,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 4,我将在我的网站上有一份登记表,首先显示董事会规则/法律。一旦接受,它将显示主登记表。使用ViewModel,如下所示: public class MyViewModel { public int Readrules { get; set; } public int Coppa { get; set; } } public ActionResult Register(MyViewModel model) { ... at this stage model.Readrule
public class MyViewModel
{
public int Readrules { get; set; }
public int Coppa { get; set; }
}
public ActionResult Register(MyViewModel model)
{
... at this stage model.Readrules and model.Coppa will contain the values passed
as query string parameters tat you could use here
}
如果我转到/register
它将显示规则,然后/register?readrules=1
它将显示注册表。这是如何在PHP中完成的,但现在我正在迁移到ASP.NET
这样做的最佳方式是什么?我是否可以重定向到同一个操作并只解析model.ReadRules的值,还是必须使用多个操作?我更愿意将其保存在一个操作中,只需检查model.ReadRules==1
,然后显示boardrules或注册表
感谢您不要重复使用注册操作,您可以使用不同的控制器操作来显示规则、注册和处理注册,如下所示:
控制器操作:
public ActionResult BoardRules()
{
return View();
}
public ActionResult Register(MyViewModel model)
{
if (model.ReadRules != 1)
return RedirectToAction("BoardRules");
return View();
}
public ActionResult Registration(MyViewModel model)
{
if (model.ReadRules != 1)
return RedirectToAction("BoardRules");
//Process the registration
return View();
}
视图:
public ActionResult BoardRules()
{
return View();
}
public ActionResult Register(MyViewModel model)
{
if (model.ReadRules != 1)
return RedirectToAction("BoardRules");
return View();
}
public ActionResult Registration(MyViewModel model)
{
if (model.ReadRules != 1)
return RedirectToAction("BoardRules");
//Process the registration
return View();
}
BoardRules.cshtml:
@*HTML显示规则*@
Register.cshtml:
@使用(Html.BeginForm(“注册”,“控制器名称]”,新的{ReadRules=1}))
{
@*表单字段*@
}
Registration.cshtml
恭喜注册!
当用户接受boardrules时,我如何才能返回到同一操作并提供注册视图?我更新了以前的回答,更彻底地回答了如何处理控制器不同操作之间的操作导航,而不是试图重新确定单个操作的用途。我更喜欢这个回答。如果我不想从/register
转到/registation
我想让它转到/register/form
我该怎么做?我的答案是基于从单个控制器执行操作。因此,注册
、注册
和董事会规则
都是该控制器的操作。你所问的将打破传统,需要路由规则。我建议重新评估对“表单”的需求。好的,我希望这至少有助于概述操作导航和重定向。当他们提交注册时,我还需要其他操作吗?我在寻找一个封装在一个视图中的东西,用于显示注册和boardrules视图之间的切换,另一个用于处理结果(如果可能),您需要一个方法类型。如果您的表单是POST,请在操作上添加[HttpPost]。您可以有两个操作使用与我提供的示例中相同的视图。为什么不在/register中显示规则并在/register/form中处理注册?那就简单多了。查询字符串背后的原因是什么?查询字符串来自我正在迁移的PHP代码,如果我有一个查询字符串,ViewModel元素会自动填充,我想我可以对注册和表单重复使用相同的操作方法,然后使用一个单独的方法来处理。本主题的主要目的是了解ASP.NET MVC中的最佳实践,因为在PHP中,很多数据都在URL中传递
@using (Html.BeginForm("Registration", "[Controller Name]", new { ReadRules = 1 }))
{
@* Form Fields *@
<input type="submit" value="Process Registration" />
}
<h2>Congratz on Registering!</h2>
public ActionResult Register()
{
return View("boardrules"); //Default
}
public ActionResult Register(MyViewModel model)
{
if (model.ReadRules == 1)
{
model.ReadRules++; //Next time it won't be 1 but step 2
return View("registration",model);
}
else
{
//Do IF or Case for other step
}
return View("boardrules"); //Default
}