zoukankan      html  css  js  c++  java
  • 牛腩购物12 :整合用户登录页 用到 asp.net 内置票据认证控件的使用(用户登录 用户权限) 用户控件ascx 设置/获取RadioButtonList 和RadioButton

    完整的内置票据认证教程,看这里:牛腩购物网3:asp.net 内置票据认证控件

    runat="server" 可以用来解决 新页面调用母版页图片路径显示不正确,以及 链接不正确。

    例如 图片 http://localhost:10356/user/images/banner.gif  给图片加一个 runat=”server” 后,就可以显示完整了。

    对于超链接也是一样的。加了runat之后,可以加 ~/  也可以不加 ~/

    image

    我们看看生成的html代码是什么样子的

    image

    vs2010控件是生成了相对路径。

    我们把后台的 page 弹出 alert  进行一个封装。我们封装在  utility 工具层的 tool.cs 类里面。需要在  Utility层上引用  System.Web 这个命名空间。

    image

     public static void alert(string mes, Page _page)
            {
                _page.ClientScript.RegisterStartupScript(_page.GetType(), "message", "<script language='javascript' defer>alert('Email格式错误,请重新输入!');</script>");
            }
    

    由于动软生成器并没有生成一个登录的方法,我们自己写一个,其实就是拿 UserDAO.cs里面的 public bool Exists(string username)  来修改一下即可

    /// <summary>登陆是否成功
    /// 
    /// </summary>
    /// <param name="name"></param>
    /// <param name="pwd"></param>
    /// <returns></returns>
    public bool Login(string name, string pwd)
    {
        Database db = DatabaseFactory.CreateDatabase();
        StringBuilder strSql = new StringBuilder();
        strSql.Append("select count(1) from shop_user where username=@name and password=@pwd ");
        DbCommand dbCommand = db.GetSqlStringCommand(strSql.ToString());
        db.AddInParameter(dbCommand, "name", DbType.String, name);
        db.AddInParameter(dbCommand, "pwd", DbType.String, pwd);
        int cmdresult;
        object obj = db.ExecuteScalar(dbCommand);
        if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
        {
            cmdresult = 0;
        }
        else
        {
            cmdresult = int.Parse(obj.ToString());
        }
        if (cmdresult == 0)
        {
            return false;
        }
        else
        {
            return true;
        }
    }
    

    image

    下面我们来看看 用户登录。

    登录控件/ asp.net 内置验证票据认证控件的使用

    1:我们分析一下  只有 user这个权限的用户 才能访问 user文件夹。 我们去 web.config  里面加入目录权限

     <!--允许的目录是 user 文件夹,允许的角色 是 user 角色-->
        <location path="user">
            <system.web>
                <authorization>
                    <allow roles="user"/>
                    <deny users="*"/>
                </authorization>
            </system.web>
        </location>
    

    2:在登录成功的时候,拷入票据的代码

    // string roles = "user"; 代表用户角色 新添加
                   string roles = "user";
                   HttpCookie cook;
                   string strReturnURL;
                   FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
                   1, name, DateTime.Now, DateTime.Now.AddMinutes(30), false, roles);
                   cook = new HttpCookie("mycook");
                   cook.Value = FormsAuthentication.Encrypt(ticket);
                   Response.Cookies.Add(cook);
                   strReturnURL = Request.Params["ReturnUrl"];
                   if (strReturnURL != null && strReturnURL.Contains(".aspx"))
                   {
                       Response.Redirect(strReturnURL);
                   }
                   else
                   {
                       Response.Redirect("user/index.aspx");
                   }
    

    在前台显示登录的用户,使用  litName.Text = User.Identity.Name;

     litName.Text = User.Identity.Name;
        litType.Text = User.Identity.IsAuthenticated.ToString();//如果登录验证成功了,那么就显示true
    

    3:有个疑问 我们之前的票据验证是验证后台的管理员的,所以如果是没有登录的话跳转到的目录是  admin/login.aspx

    <authentication mode="Forms">
                <forms name="mycook" loginUrl="admin/login.aspx" protection="All" path="/"/>
            </authentication>
    

    如果是多用户系统(例如  后台的管理员是用的 admin 文件夹,跳转到的登陆页是 admin/login.aspx  前台的用户是 user文件夹,跳转到的登陆页是首页)

    ,但是在web.config中 只能设置一个跳转到的页面。

    那么上面的办法是没办法跳转到2个登录页面的 这时候我们就需要建立一个中间的跳转登录页来根据ReturnURL中是否包含admin 或者user来判断跳转到哪个登录页面了

    建立 login_redirect.aspx,在后台代码里面,由于跳转之后都会在后面加上一个 ReturnUrl 我们就根据这个来判断

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace Niunan.Shop.Web
    {
        public partial class login_redirect : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                //我们把所有的未登录跳转验证都放到这个页面,由于跳转之后都会在后面加上一个  ReturnUrl 我们就根据这个来判断
                // http://localhost:10356/admin/login.aspx?ReturnUrl=%2fuser%2findex.aspx
    
                string strReturnUrl = Request.QueryString["ReturnUrl"];
                if (!string.IsNullOrEmpty(strReturnUrl) && strReturnUrl.Contains("admin"))  //因为我们后台是 admin地址
                {
                    Response.Redirect("admin/login.aspx?returnurl="+strReturnUrl);//如果后面不加 strReturnUrl的话,登录后就不知道跳回原来的那个页面了
                }
                else
                {
                    Response.Redirect("default.aspx?returnurl="+strReturnUrl);
                }
            }
        }
    }
    

    4:修改 web.config  把跳转的页面设置为我们刚才新建的这个  login_redirect.aspx

     <authentication mode="Forms">
                <forms name="mycook" loginUrl="login_redirect.aspx" protection="All" path="/"/>
            </authentication>
    
    5:获取这个登录的名字,我们使用  
    litName.Text = User.Identity.Name;
    

    6: //将登陆后的信息,保存到登陆日志,注意这里 虽然我们保存到cookie了,但是在当前页面还暂时无法通过User.Identity.Name获取到
                  
    new Niunan.Shop.DAL.Login_logDAO().Add(new Niunan.Shop.Model.Login_log()
                   {
                       createdate = DateTime.Now,
                       username = name// User.Identity.Name
                  
    });

    RadioButtonList 和RadioButton的使用(都是单选按钮)

    最常见的用途就是用在  男女性别的设置

    代码的区别  RadioButton  使用GroupName 来表示他们互斥

    <asp:RadioButton ID="radIsopen1" runat="server" GroupName="isopen" Text="公开" />
        <asp:RadioButton ID="radIsopen2" runat="server" GroupName="isopen" Text="不公开" />
    
    RadioButtonList的使用方法如下
    <asp:RadioButtonList  ID="radlSex" runat="server" RepeatDirection="Horizontal">
                                        <asp:ListItem Value="0"></asp:ListItem>
                                        <asp:ListItem Value="1"></asp:ListItem>
                                        <asp:ListItem Value="2">保密</asp:ListItem>
                                    </asp:RadioButtonList>
    

    那么在后台如何设置 RadioButton 的选中和 RadioButtonList 的选中呢?  RadioButton 用 checked = true 来判断

                    if (u.isopenemail == 1)
                        {
                            radIsopen1.Checked = true;
                        }
                        else
                        {
                            radIsopen2.Checked = true;
                        }
    如何在后台设置设置 RadioButtonList的值或者是 text 呢?
    RadioButtonList1.Text;//获取选中的值 
        RadioButtonList1.Items.FindByText("查找的的值").Selected = true;//通过显示内容设置指定项选中 
        RadioButtonList1.Items.FindByValue("查找的的值").Selected = true;//通过值设置指定项选中
    
     
    ListItem li = radlSex.Items.FindByValue(u.sex.ToString()); //通过值来寻找 item
                       if (li != null)
                       {
                           li.Selected = true;
                       }
    
  • 相关阅读:
    银行业务调度系统
    交通灯管理系统
    Java高新技术
    Java反射机制
    java的集合框架
    正则表达式
    IPD CBB
    TCP的可靠传输(依赖流量控制、拥塞控制、连续ARQ)
    等价类划分
    Pycharm常用配置汇总
  • 原文地址:https://www.cnblogs.com/iceicebaby/p/2392288.html
Copyright © 2011-2022 走看看