2016-08-12 56 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-A为我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(drp_user.SelectedIndex == 0 && drp_permission.SelectedIndex == 0 || drp_user.SelectedIndex == 0 || drp_permission.SelectedIndex == 0) ,,,这行产生错误! –

回答

0

如果您drp_use r定义?这将是零,如果你不能确定这个对象

如果你仍然想不若

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

它在我的主网页的aspx,这是保护全球的设计师代码:: System.Web.UI.WebControls.DropDownList drp_user; ///

/// UserDataSource控件。 /// /// ///自动生成的场。 ///从设计文件进行修改,请将字段声明移到代码隐藏文件。 ///

+0

确定这个隐藏错误,但它并没有帮助,我还是想在我的主要的aspx页面 –

+1

运行该代码取决于下拉列表它一直空,因为它不是在正确的上下文。 drp_user仅在您的代码中可用。在这种情况下,它被放置在不同的班级中。如果你想在另一个类中设计它,我认为你必须将下拉框传递给你的函数,然后使用它 –

0

在你的ASPX标记定义DRPü必须改变,你有自动回设置为true?为什么不使用下拉式选择索引更改事件来记录值并将其传递给DB方法?这样你就可以实现这个..

+0

你不明白我的问题,我有2个类A,B .. A类有控制/对象..和B:A。 然后我写了代码在类B中执行代码取决于类A中的对象。 当我调用类B方法在我的类A它给了我这个错误。 –