【发布时间】:2010-11-14 09:17:17
【问题描述】:
所以我正在做一个位于此处的向导: how to make a wizard with ASP.Net MVC 每个页面都有自己的 div,但每个 div 确实位于同一页面上。现在,有 2 个问题...我是 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,但它对我不起作用。
另外,我想执行以下操作,如果能提供任何帮助,我将不胜感激。在用户启动向导之前,我希望向用户呈现一个选择页面(显然)然后在选择之后,我希望网址是这样的 localhost:xxxx/Wizard/'PartNumber'/'PageNumberOfWizard' 因此,如果用户选择部件号 12345 并启动向导,他们将被重定向到 localhost:xxxx/Wizard/12345/1(对于第 1 页)和 localhost:xxxx /Wizard/12345/2 用于第 2 页,依此类推,每个页面显示下一个 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>
在视图中也是如此,仍然没有。
【问题讨论】:
标签: asp.net-mvc validation html