Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 如何隐藏jQuery选项卡直到经过身份验证,并在MVC3中进行身份验证后添加或显示它们?_Asp.net Mvc 3_Jquery Ui_Partial Views_Jquery Ui Tabs - Fatal编程技术网

Asp.net mvc 3 如何隐藏jQuery选项卡直到经过身份验证,并在MVC3中进行身份验证后添加或显示它们?

Asp.net mvc 3 如何隐藏jQuery选项卡直到经过身份验证,并在MVC3中进行身份验证后添加或显示它们?,asp.net-mvc-3,jquery-ui,partial-views,jquery-ui-tabs,Asp.net Mvc 3,Jquery Ui,Partial Views,Jquery Ui Tabs,摘要 我目前正在尝试使用MVC3体系结构和jQueryUI控件构建一个Web应用程序。到目前为止,我已经能够显示选项卡并在其中导航 现在,我可以让登录页面显示在我的第一个选项卡上,因为这是此应用程序的第一个必需操作 一旦认证,我想能够添加一些其他选项卡,允许使用这个应用程序 该应用程序是关于一个电话簿列表,其中包含已知的人的邮寄地址 也就是说,此应用程序的工作流程将是: 首次到达现场时进行认证 如果用户尚未注册,应用程序应允许该用户一次性注册,使用相同的jQuery UI选项卡,或者显示新的注册

摘要

我目前正在尝试使用MVC3体系结构和jQueryUI控件构建一个Web应用程序。到目前为止,我已经能够显示选项卡并在其中导航

现在,我可以让登录页面显示在我的第一个选项卡上,因为这是此应用程序的第一个必需操作

一旦认证,我想能够添加一些其他选项卡,允许使用这个应用程序

该应用程序是关于一个电话簿列表,其中包含已知的人的邮寄地址

也就是说,此应用程序的工作流程将是:

  • 首次到达现场时进行认证
  • 如果用户尚未注册,应用程序应允许该用户一次性注册,使用相同的jQuery UI选项卡,或者显示新的注册选项卡,或者显示一个模式对话框
  • 从步骤1进行身份验证后,用户现在可以访问站点的不同功能
  • 例如,假设我想注册一个新用户,我是这个web应用程序管理员。我将首先对此应用程序进行身份验证,然后我将看到任何用户都可以看到的常见选项卡,以及一个用于创建/注册新用户的特殊选项卡,这些新用户将能够对此应用程序进行身份验证。一旦站点管理员成功注册

    我已经能够显示登录视图,我删除了模板创建的初始视图,并将其重新创建为局部视图,以便能够将其包含在jQuery UI选项卡主体中。这个很好用

    我的HomeController中也有一个SelectTab方法,它应该知道根据作为输入参数传入的id值显示什么部分视图

    现在,当我尝试从第一个jqueryui选项卡上的LogOn部分视图导航时,这实际上是唯一可用的选项,单击Register链接不会让我在同一选项卡中显示Register部分视图

    代码示例

    HomeController类:

    public class HomeController : Controller {
        public ActionResult Index() { return View(); }
    
        public ActionResult SelectTab(int id) {
            switch (id) {
                case 0: return RedirectToAction("Register", "Account");
                default: return RedirectToAction("LogOn", "Account");
            }
        }
    }
    
    public class AccountController {
        public ActionResult LogOn() { return PartialView(new LogOnModel()); }
        public ActionResult Register() { return PartialView(new RegisterModel()); }
    }
    
    AccountController类:

    public class HomeController : Controller {
        public ActionResult Index() { return View(); }
    
        public ActionResult SelectTab(int id) {
            switch (id) {
                case 0: return RedirectToAction("Register", "Account");
                default: return RedirectToAction("LogOn", "Account");
            }
        }
    }
    
    public class AccountController {
        public ActionResult LogOn() { return PartialView(new LogOnModel()); }
        public ActionResult Register() { return PartialView(new RegisterModel()); }
    }
    
    此处所述的两个模型(LogOnModel、RegisterModel)都是模板的默认模型

    和my_Layout.cshtml共享视图:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <title>@ViewBag.Title</title>
        <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/themes/south-street/jquery-ui.css" rel="stylesheet" type="text/css" />
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
        <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js" type="text/javascript"></script>
        <script>
            $(window).load(function () {
                $("#tabs").tabs({ select: function (event, ui) { selectTab(getSelectedTab()); } });
                logIn();
            });
    
            function logIn() {
                selectTab(-1);
                selectTab(0);
            }
    
            function selectTab(index) {
                var url = '@Url.Content("~/Home/SelectTab/")' + index;
                var targetDiv = "#tab" + index;
                $.get(url, null, function(result) { $(targetDiv).html(result); });
            }
    
            function getSelectedTab() { return $("#tabs").tabs("option", "selected"); }
            function setSelectedTab(index) { $("#tabs").tabs("option", "selected", index); }
        </script>
    </head>
    <body>
        <div id="tabs">
            <ul id="menu">
                <li><a href="#tab0"><span>Authenticate</span></a></li>
                @if (Request.IsAuthenticated) {
                    <li><a href="#tab1"><span>About</span></a></li>
                }
            </ul>
            <div id="tab0"></div><div id="tab1"></div>
        </div>
        @RenderBody()
    </body>
    
    
    @视图包。标题
    $(窗口)。加载(函数(){
    $(“#tabs”).tabs({select:function(event,ui){selectTab(getSelectedTab());}});
    登录();
    });
    函数登录(){
    选择标签(-1);
    选择选项卡(0);
    }
    功能选择选项卡(索引){
    var url='@url.Content(“~/Home/SelectTab/”)+索引;
    var targetDiv=“#tab”+索引;
    $.get(url,null,函数(结果){$(targetDiv.html(结果);});
    }
    函数getSelectedTab(){return$(“#tabs”).tabs(“option”,“selected”);}
    函数setSelectedTab(index){$(“#tabs”).tabs(“选项”,“选定”,索引);}
    
    • @如果(请求已验证){
    • }
    @RenderBody()

    开发环境

    我正在使用:

  • VS2010和.NET4.0
  • jQuery UI(版本和样式模板见_Layout.csthml代码示例)
  • ASP.NETMVC3
  • 问题

    *单击“登录”部分视图中包含的“注册”链接到同一选项卡后,如何呈现“注册”部分视图


    也许隐藏实际选项卡并显示另一个用于注册的选项卡会更简单?但是,如何实现这一点呢?*

    我建议通过ajax加载每个其他选项卡(登录除外)。您可以通过ajax从提交登录,并在成功响应时销毁登录选项卡,然后动态添加一个新选项卡,并将href设置为ajax操作

    你可以完成你想做的事情,但是它需要大量的jquery和ajax(我建议你试试)。服务器端是最简单的部分


    我认为不使用SelectTab开关直接调用操作也更好

    你在登录后刷新页面吗?我想如果这是可行的,我也许可以避免它。+1谢谢你的提示。另外,我有工业和框架背景,所以我不熟悉AJAX和所有不同的Web技术。我在你的链接后读到了关于淘汰赛的消息,我肯定会尝试一下。此外,我认为jQuery和jQueryUI是ASP.NETMVC的领先技术,所以我想我会尝试这项艰苦的工作,这样我就可以学习“艰苦的方法”,所以一旦完成,我会完全理解为了达到我想要的目的我必须使用的一切。我开始谦卑地相信,我已经吃不下了。如果你想做我想做的事情,你的代码会是什么样子?由于“世界”正在向它转变,我希望在开发Web应用程序方面做得更好,因此我非常感谢一些入门指南。提供一个获得期望目标的例子,你肯定会得到一个公认的答案。我向你发誓。谢谢你的好意和帮助!