ASP.NET MVC验证后显示div

时间:2009-07-27 14:46:31

标签: asp.net-mvc validation html

所以我正在这里做一个巫师: 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>

在视图中,仍然没有。

1 个答案:

答案 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,它接受一个I​​nt参数。