2016-08-12 2 views
0

Я разрабатываю сайт Asp.net, и я решил сделать это, используя концепции oop.Ошибка при вызове кода из другого класса в Asp.net

поэтому мои первые мысли состоят в том, чтобы инкапсулировать мой код (весь позади кода) во внешний класс, а затем вызвать его на моей странице 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 ! "; 
       } 
      } 
     } 
    } 
} 
+0

Какая строка кода генерирует ошибку? – ekad

+0

Поместите контрольную точку в свой код и посмотрите, какой объект является «null» – Shyju

+0

@ekad if (drp_user.SelectedIndex == 0 && drp_permission.SelectedIndex == 0 || drp_user.SelectedIndex == 0 || drp_permission.SelectedIndex == 0) ,,, Эта строка, которая генерирует ошибку! –

ответ

0

Где ваш drp_use r определить? Это будет аннулирована, если вы не определить этот объект

, если вы все еще хотите, не определить DRP и должно измениться, если

if (drp_user != null && (drp_user.SelectedIndex == 0 .... 
+0

он находится на моей главной веб-странице aspx, и это защищенный код разработчика global :: System.Web.UI.WebControls.DropDownList drp_user; ///

/// Элемент управления UserDataSource. /// /// /// Автогенерируемое поле. /// Чтобы изменить объявление поля перемещения из файла конструктора в файл с кодом. ///

+0

ОК, это скрыть эту ошибку, но это не помогло, я все равно хочу запустить этот код в зависимости от раскрывающегося списка на моей главной странице aspx. –

+1

Он был пустым, потому что он не в правильном контексте. drp_user доступен только в вашем коде. В этом случае он был помещен в другой класс.Если вы хотите создать его в другом классе, я думаю, вы должны передать dropdownbox своей функции, а затем использовать его –

0

В вашем ASPX разметке, Есть ли у вас AutoPostBack установлен верно? Почему бы не использовать выпадающее событие с измененным индексом, чтобы регистрировать значения и передавать их методу БД? Таким образом, вы можете достичь этого.

+0

вы не поняли мою проблему, у меня есть 2 класса A, B .. Класс A имеет элементы управления/объекты .. и B: A. Затем я написал код в классе B для выполнения кода в зависимости от объектов класса A. Когда я звоню Метод класса B В моем классе A он дает мне эту ошибку. –

Смежные вопросы