【问题标题】:ASP.NET MVC Show div after validationASP.NET MVC 验证后显示 div
【发布时间】: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


    【解决方案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 参数。

    【讨论】:

    • 在我的 Index() 中(在这种情况下,这个 Index 没有参数),我只有一个 return View();调用,但是当我这样做时,我收到一条错误消息,指出它在任何位置都找不到 ContinueToCorr.aspx。我想如果你在一个函数下有一个 return View(),它会寻找为那个函数命名的视图,在这种情况下是索引,不是吗?我错过了什么吗?
    • 还有什么我会用参数传递给索引?
    • 不总是...如果你想强制渲染视图,把 return View("Index");我不明白你的第二条评论。我以为您想将“1”传递给您的索引操作,因为您放在那里的路由 /Wizard/Index/1。
    • 所以我对如何显示/隐藏 div 还是有点迷茫。我现在有我的设置,以便我传递操作,所以可以说地址是:localhost:xxxx/Wizard/Selection,它将调用选择函数。一个更好的解决方案,并且可以实施。但仍然不确定如何传递 viewData 以便我可以显示/隐藏 div。
    • 所以现在我有一个返回 View(); 的索引函数。当我调用 return Index();从 ContinueToCorr 函数中,它实际上调用了 Index() 函数,但它并没有返回 Index 视图,而是仍想返回 ContinueToCorr 视图。
    猜你喜欢
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    相关资源
    最近更新 更多