从Asp.net中的其他类调用代码时出错

时间:2016-08-12 03:05:37

标签: c# asp.net oop

我正在开发一个Asp.net网站,我决定使用oop概念。

所以我的第一个想法是将我的代码(整个代码)封装在外部类中,然后在我的Aspx页面中调用它来执行。

我创建了一个新类,然后我从主类派生它,以便能够访问主类控件,如按钮,标签等......

当我调用包含代码的方法时,它会给我一个错误

  

“对象引用未设置为对象的实例。”

所以我认为这意味着我的第二堂课(衍生一堂课)  无法访问我的主类对象/控件并根据它的值运行代码。

该方法应根据DropDownList执行一些代码,但它会产生此错误。

我真的很感谢你的帮助!

1 - (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.SqlClient;
using System.Data;


namespace power_CMS.Authentication
{

    public  partial class Permissions : System.Web.UI.Page
    {


        //connection string 
        //db name = cms
        SqlConnection conn = new SqlConnection("data source=.\\sqlexpress ; initial catalog=cms ; integrated security = true");

        protected void Page_Load(object sender, EventArgs e)
        {

        }



        protected void btn_grant_Click(object sender, EventArgs e)
        { //grant permission to Members
            Cms c = new Cms();
            c.User_Role_Insert();

        }

2 - 我的aspx页面的设计器代码的一部分

 protected global::System.Web.UI.WebControls.DropDownList drp_user;

    /// <summary>
    /// UserDataSource control.
    /// </summary>
    /// <remarks>
    /// Auto-generated field.
    /// To modify move field declaration from designer file to code-behind file.

3 - 这是我的派生类的代码,我将代码封装在其中:

    namespace power_CMS
{    

    public  class Cms :power_CMS.Authentication.Permissions
    {

        //sql connection
        public  static SqlConnection conn = new SqlConnection("data source=.\\sqlexpress ; initial catalog=*** ; integrated security = true");


        public void User_Role_Insert()
        {




            if (drp_user.SelectedIndex == 0 && drp_permission.SelectedIndex == 0 || drp_user.SelectedIndex == 0 || drp_permission.SelectedIndex == 0)
            {
                //make sure that user will make a valid choise with both dropdownlists
                //Invalid Choise Code

               lbl_confirm.Text = "Please Make A Valid Choise !";
            }

            else
            {
               // Valid Choise Code

                try
                {
                    conn.Open();

                    // string str = "insert into aspnet_UsersInRoles(UserId,RoleId) values('"+c.drp_user.SelectedValue+"','"+drp_permission.SelectedValue+"')";

                    SqlCommand cmd = new SqlCommand("aspnet_UsersInRoles_Insert", conn);

                    cmd.CommandType = CommandType.StoredProcedure;

                    cmd.Parameters.Add("UserId", SqlDbType.UniqueIdentifier).Value = new Guid(drp_user.SelectedValue);
                    cmd.Parameters.Add("RoleId", SqlDbType.UniqueIdentifier).Value = new Guid(drp_permission.SelectedValue);

                    cmd.ExecuteNonQuery();
                    conn.Close();

                    lbl_confirm.Text = "Permission Granted ...!";


                    drp_user.SelectedIndex = 0;
                   drp_permission.SelectedIndex = 0;

                }
                catch (Exception)
                {

                   lbl_confirm.Text = "Sorry <br> This User Already Have A Permission ! ";
                }
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

drp_use r定义的位置?如果你没有定义这个对象,它将为null

如果您仍然不想定义drp,则必须在

中进行更改
if (drp_user != null && (drp_user.SelectedIndex == 0 ....

答案 1 :(得分:0)

在您的aspx标记中,您是否将Autopostback设置为true?为什么不使用下拉列表选择索引更改事件来记录值并将其传递给DB方法?通过这种方式你可以实现这个目标..