English 中文(简体)
C# DropDownList and Session ["]
原标题:C# DropDownList and Session[""]

每个人都。

I have a little issue with selecting value from the dropdown list. When user enters his/her credentials and selects the datasource name, they are all stored in session. When the user comes back to the login page later, I want him/her to see last selected datasource name. It works for the first time, but when I try to change the datasource name, it doesnt change but the value chosen before appears. Can you help me with this issue? Thanks!

违约。

public partial class _Default : System.Web.UI.Page 
{
    private dbConnection connection = new dbConnection();
    private string[,] errorMessage = 
        { {"Expired", "Unsuccessful", "Incorrect"}, 
        {"Your Logon Session Has Expired", "Invalid Username or Password", 
            "Selected Data Source is not supported within this application"} };

    protected void Page_Load(object sender, EventArgs e)
    {

        ddlDatabase.DataTextField = "Value";
        ddlDatabase.DataValueField = "Key"; 
        ddlDatabase.DataSource = dbList.GetDbList();
        ddlDatabase.DataBind();    

        Response.Buffer = true;

        if (Session["Error"] != null)
                ErrorMessage();

        if (Session["Datasource"] != null)
            ddlDatabase.SelectedValue = Session["Datasource"].ToString();
    }

    protected void btnLogin_Click(object sender, EventArgs e)
    {
        string dataSource = ddlDatabase.SelectedValue;
        string userID = txtUserID.Text;
        string password = txtPassword.Text;

        connection = new dbConnection(dataSource, userID, password);

        if (connection.IsValid())
        {
            try
            {
                connection.GetConnection().Open();
                Session["Username"] = userID;
                Session["Password"] = password;
                Session["Datasource"] = ddlDatabase.SelectedValue;
                Response.Clear();
                Response.Redirect("main.aspx", false);
            }
            catch (Exception ex)
            {
                lblSessionInfo.Text = ex.Message;
                Session["Username"] = null;
                Session["Password"] = null;
                Session["Error"] = "Unsuccessful";
                Response.Clear();
                Response.Redirect("违约。");
            }
        }
        else
        {
            Session["Username"] = null;
            Session["Password"] = null;
            Session["Datasource"] = null;
            Session["Error"] = "Incorrect";
            Response.Clear();
            Response.Redirect(Request.Url.ToString(), true);
        }
    }

    protected void ErrorMessage()
    {
        int length = errorMessage.Length / 2;

        for (int i = 0; i < length; i++)
            if (Session["Error"].ToString() == errorMessage[0, i])
                lblSessionInfo.Text = errorMessage[1, i];
    }
}

主编.aspx(记录仪)

public partial class main : System.Web.UI.Page
{
    dbConnection connection = new dbConnection();

    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Buffer = true;
        if (Session["Username"] == null)
        {
            Session["Error"] = "Expired";
            Response.Clear();
            Response.Redirect("违约。");
        }
        else
        {
            Session["Error"] = null;
        }

        Label1.Text = Session["Datasource"].ToString();
    }
    protected void btnLogout_Click(object sender, EventArgs e)
    {
        connection.GetConnection().Close();
        Session["Username"] = null;
        Session["Password"] = null;
        Response.Clear();
        Response.Redirect(Request.Url.ToString(), true); 
    }
}

dbList.cs

public class dbList
{
    public static Dictionary<int, string> GetDbList()
    {
        //List<string> dataSources = new List<string>();
        var dataSources = new Dictionary<int, string>(); 

        RegistryKey reg = (Registry.LocalMachine).OpenSubKey("Software");
        reg = reg.OpenSubKey("ODBC");
        reg = reg.OpenSubKey("ODBC.INI");
        reg = reg.OpenSubKey("ODBC Data Sources");

        if (reg != null)
        {
            string[] items = reg.GetValueNames();
            Array.Sort(items);
            int i = 0;
            foreach (string item in items)
            {
                dataSources.Add(i, item);
                i++;
            }
        }

        reg.Close();

        return dataSources;
    }
}

dbConnection.cs

public class dbConnection
{
    private string[] dataSources = { "name1", "name2", "name3" };

    public dbConnection() {}

    public dbConnection(string dataSource, string userID, string password)
    {
        DataSource = dataSource;
        UserID = userID;
        Password = password;
    }

    public string DataSource { get; set; }
    private string UserID { get; set; }
    private string Password { get; set; }

    public OracleConnection GetConnection()
    {
        OracleConnection connection = null;

        string connectionString = 
            @"Data Source="+ DataSource + 
            ";User ID=" + UserID + 
            ";Password=" + Password + 
            ";Unicode=True";

        try
        {
            connection = new OracleConnection(connectionString);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error");
        }

        return connection;
    }

    public bool IsValid()
    {
        int trueCount = 0;

        foreach (string dataSource in dataSources)
            if (DataSource == dataSource) trueCount++;

        if (trueCount > 0) return true;
        else  return false;
    }

}
最佳回答

Found solution. It is much simpler than I thought. Instead of using ddlDatabase.DataSource, I used ddlDatabase.Items.Add(); and added Session["Datasource"] = null;. Here are the codes:

default.aspx

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.OracleClient;
using System.Windows.Forms;

public partial class _Default : System.Web.UI.Page 
{
    private db connection = new db();
    private string[,] errorMessage = 
        { {"Expired", "Unsuccessful", "Incorrect"}, 
        {"Your Logon Session Has Expired", "Invalid Username or Password", 
            "Selected Data Source is not supported within this application"} };

    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Buffer = true;

        foreach (string name in connection.GetDbList())
            ddlDatabase.Items.Add(name);

        if (Session["Error"] != null)
                ErrorMessage();

        if (Session["Datasource"] != null)
        {
            ddlDatabase.SelectedValue = Session["Datasource"].ToString();
            Session["Datasource"] = null;
        }

    }

    protected void btnLogin_Click(object sender, EventArgs e)
    {
        string dataSource = ddlDatabase.SelectedValue.ToString();
        string userID = txtUserID.Text;
        string password = txtPassword.Text;

        connection = new db(dataSource, userID, password);

        if (connection.IsValid())
        {
            try
            {
                connection.GetConnection().Open();
                Session["Username"] = userID;
                Session["Password"] = password;
                Session["Datasource"] = ddlDatabase.SelectedValue;
                Response.Clear();
                Response.Redirect("main.aspx", false);
            }
            catch (Exception ex)
            {
                lblSessionInfo.Text = ex.Message;
                Session["Username"] = null;
                Session["Password"] = null;
                Session["Datasource"] = ddlDatabase.SelectedValue;
                Session["Error"] = "Unsuccessful";
                Response.Clear();
                Response.Redirect("default.aspx");
            }
        }
        else
        {
            Session["Username"] = null;
            Session["Password"] = null;
            Session["Datasource"] = null;
            Session["Error"] = "Incorrect";
            Response.Clear();
            Response.Redirect(Request.Url.ToString(), true);
        }
    }

    protected void ErrorMessage()
    {
        int length = errorMessage.Length / 2;

        for (int i = 0; i < length; i++)
            if (Session["Error"].ToString() == errorMessage[0, i])
                lblSessionInfo.Text = errorMessage[1, i];
    }
}

<>strong>db.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.OracleClient;
using System.Windows.Forms;
using Microsoft.Win32;

public class db
{
    private string[] dataSources = { "ValidNames" };

    public db() {}

    public db(string dataSource, string userID, string password)
    {
        DataSource = dataSource;
        UserID = userID;
        Password = password;
    }

    private string DataSource { get; set; }
    private string UserID { get; set; }
    private string Password { get; set; }

    public OracleConnection GetConnection()
    {
        OracleConnection connection = null;

        string connectionString = 
            @"Data Source="+ DataSource + 
            ";User ID=" + UserID + 
            ";Password=" + Password + 
            ";Unicode=True";

        try
        {
            connection = new OracleConnection(connectionString);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error");
        }

        return connection;
    }

    public List<string> GetDbList()
    {
        List<string> dataSources = new List<string>();

        RegistryKey reg = (Registry.LocalMachine).OpenSubKey("Software");
        reg = reg.OpenSubKey("ODBC");
        reg = reg.OpenSubKey("ODBC.INI");
        reg = reg.OpenSubKey("ODBC Data Sources");

        if (reg != null)
        {
            string[] items = reg.GetValueNames();
            Array.Sort(items);
            foreach (string item in items)
                dataSources.Add(item);
        }

        reg.Close();

        return dataSources;
    }

    public bool IsValid()
    {
        int trueCount = 0;

        foreach (string dataSource in dataSources)
            if (DataSource == dataSource) trueCount++;

        if (trueCount > 0) return true;
        else  return false;
    }
}
问题回答

UPDATE: 6/13/2011

您能否尝试创建<代码>Dictionary,而不是List<string>,载于GetConnection(?

var dictionary = new Dictionary<int, string>();
dictionary.Add(1, "Connection1");
dictionary.Add(2, "Connection2");
dictionary.Add(3, "Connection3");
dictionary.Add(4, "Connection4");

// Binding the dictionary to the DropDownList:
dropDown.DataTextField = "Value";
dropDown.DataValueField = "Key";
dropDown.DataSource = dictionary;  //Dictionary<int, string>
dropDown.DataBind();

You need to Bind Your ddlDatabase First & then set the SelectedValue. Otherwise, only 1 item is created (with the SelectedValue) in yourDropdown list, and you dont have any items to choose from Except the one item.

//Code to databind ddlDatabase
BindDatabaseDropdown();
if (Session["Datasource"] != null)
        ddlDatabase.SelectedValue = Session["Datasource"].ToString();

这是否只是因为法典的这一部分?

protected void Page_Load(object sender, EventArgs e)
{
    ddlDatabase.DataSource = dbList.GetDbList();
    ddlDatabase.DataBind();

    Response.Buffer = true;

    if (Session["Error"] != null)
            ErrorMessage();

    if (Session["Datasource"] != null)
        ddlDatabase.SelectedValue = Session["Datasource"].ToString();
}

www.un.org/Depts/DGACM/index_french.htm 数值=会议[“数据来源”]。 现在,在叫Click_handler之前,你下一份名单的选定价值总是从本届会议中取走。 因此,这一部分:

Session["Password"] = password;
Session["Datasource"] = ddlDatabase.SelectedValue;
Response.Clear();

www.un.org/Depts/DGACM/index_french.htm





相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

How to Add script codes before the </body> tag ASP.NET

Heres the problem, In Masterpage, the google analytics code were pasted before the end of body tag. In ASPX page, I need to generate a script (google addItem tracker) using codebehind ClientScript ...

Transaction handling with TransactionScope

I am implementing Transaction using TransactionScope with the help this MSDN article http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx I just want to confirm that is ...

System.Web.Mvc.Controller Initialize

i have the following base controller... public class BaseController : Controller { protected override void Initialize(System.Web.Routing.RequestContext requestContext) { if (...

Microsoft.Contracts namespace

For what it is necessary Microsoft.Contracts namespace in asp.net? I mean, in what cases I could write using Microsoft.Contracts;?

Separator line in ASP.NET

I d like to add a simple separator line in an aspx web form. Does anyone know how? It sounds easy enough, but still I can t manage to find how to do it.. 10x!

热门标签