所以我正在这里做一个巫师: how to make a wizard with ASP.Net MVC 每个页面都有自己的div,但每个div都位于同一页面上。现在,有两个问题......我是MVC的新手,希望在继续下一页之前进行某种验证。验证的范围从一个简单的文本框(那里有数据吗?)到文本框中的数据格式是否正确,是否选择了下拉列表中的项目,列表框中是否有项目(互斥列表框) )。所以有各种各样的变化,包括一些页面将有分页/排序表,用户将从列表中选择一个项目,然后单击修改该项目或添加一个新项目,这将取决于什么如有必要,用户会在第一页上填充其余页面。现在,我试过这个:
public ActionResult ContinueToCorr(string Number, string Rev)
{
ViewData["DivIsVisible"] = true;
return RedirectToAction("../Wizard/Index/1");
}
位于此处set div visible fasle in get method of controller但它对我不起作用。
此外,我想做以下事情,我将非常感谢任何帮助。在用户启动向导之前,我喜欢向用户显示选择页面(显然),然后在选择之后,Id就像网址一样是这样的 localhost:xxxx / Wizard /'PartNumber'/'PageNumberOfWizard'因此,如果用户被选中部件号12345并启动向导,则会将它们重定向到localhost:xxxx / Wizard / 12345/1(第1页)和localhost:xxxx / Wizard / 12345/2用于第2页,依此类推,每个页面显示下一个div,并在成功验证后隐藏上一个div。
最后,我尝试使用asax文件进行路由,以便在网址中获得我想要的内容,但这就是我提出的:
routes.MapRoute(
"Wizard", // Route name
"Wizard/{PartNum}/{PageId}", // URL with parameters
new { controller = "Wizard", action = "Index" } // Parameter defaults
);
因此看起来它总是会调用Wizard控制器的Index方法。
现在我在浏览页面中尝试了以下内容:
<% Html.BeginForm("ContinueToPage", "Wizard", FormMethod.Post); %>
<div class="span-87 buttons">
<input type="submit" value="Continue" name="button" />
</div>
<% Html.EndForm(); %>
围绕表单中的每个按钮调用该按钮的新特定函数以启动验证过程,然后继续下一页,后面的代码如下所示:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult ContinueToCorr(string Number, string Rev)
{
//if (String.IsNullOrEmpty(Number))
// ModelState.AddModelError("Number", "Number is required");
//if (String.IsNullOrEmpty(TPSSWRevision))
// ModelState.AddModelError("Rev", "Revision is required");
//if (!ModelState.IsValid)
// return View();
ViewData["DivIsVisible"] = true;
return RedirectToAction("../Wizard/Index/1");
}
我不确定这些是否完全正确但我觉得好像我在这里跑圈子。非常感谢。对不起,如果它这么长,但我想尽可能详细。另外,我已将此包括在内:
<script runat="server">
protected bool DivIsVisible {
get {
return ViewData["DivIsVisible"] != null && (bool)ViewData["DivIsVisible"];
}
}
</script>
在视图中,仍然没有。
答案 0 :(得分:1)
我可以回答你的第一个问题:
public ActionResult ContinueToCorr(string Number, string Rev)
{
ViewData["DivIsVisible"] = true;
return RedirectToAction("../Wizard/Index/1");
}
您正在使用RedirectToAction,它会清除所有ViewData。相反,使用:
public ActionResult ContinueToCorr(string Number, string Rev)
{
ViewData["DivIsVisible"] = true;
return Index(1);
}
我假设您在Wizard控制器中有一个名为Index的ActionResult,它接受一个Int参数。