牛腩购物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;
                   }
原文地址:https://www.cnblogs.com/iceicebaby/p/2392288.html