2014-02-11 68 views
0

我在ASP.NET中創建了一個動態控制腳本。現在,當你在下面看到的照片...訪問aspx.cs文件的動態用戶控制

enter image description here

現在我想要做的是,從UserDontrol產生的內容,有下劃線的值,我想將它們存儲在數據庫中。我創建了一個公共類,但在數據庫中它被存儲爲空值(不是NULL)。

這些代碼:

.ascx.cs文件

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.Configuration; 
using System.Data; 

public partial class UserControl_ContactDetails : System.Web.UI.UserControl 
{ 

    public String TextProperty 
    { 
     get 
     { 
      return LabelCmimi.Text; 
     } 
     set 
     { 
      LabelCmimi.Text = value; 
     } 
    } 

    public void Page_Load(object sender, EventArgs e) 
    { 
     //if(Page.IsPostBack) 
     //{ 
      DropDownListArtikulli.Text = Request.Form[DropDownListArtikulli.UniqueID]; 
      LabelCmimi.Text = Request.Form[LabelCmimi.UniqueID]; 
      TextBoxSasia.Text = Request.Form[TextBoxSasia.UniqueID]; 
      LabelVlera.Text = Request.Form[LabelVlera.UniqueID]; 
     //} 

     Cmimi(); 
     Vlera(); 

     Session["Artikulli"] = DropDownListArtikulli.SelectedItem.ToString(); 
     Session["Cmimi"] = LabelCmimi.Text; 
     Session["Sasia"] = TextBoxSasia.Text; 
     Session["Vlera"] = LabelVlera.Text; 
    } 

    public void Cmimi() 
    { 
     DataTable listaArtikujt = new DataTable(); 

     using (SqlConnection lidhje = new SqlConnection(ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString)) 
     { 
      try 
      { 

       SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM [Artikujt]", lidhje); 
       adapter.Fill(listaArtikujt); 

       DropDownListArtikulli.DataSource = listaArtikujt; 
       DropDownListArtikulli.DataTextField = "Artikulli"; 
       DropDownListArtikulli.DataValueField = "Cmimi"; 
       DropDownListArtikulli.DataBind(); 

       LabelCmimi.Text = DropDownListArtikulli.SelectedValue.ToString(); 

      } 
      catch (Exception ex) 
      { 
       Response.Write("Gabim:" + ex.ToString()); 
      } 
     } 
    } 

    public void Vlera() 
    { 
     if(!string.IsNullOrEmpty(TextBoxSasia.Text)) 
     { 
      LabelVlera.Text = TextBoxSasia.Text.ToString(); 

      int a = Convert.ToInt32(LabelCmimi.Text); 
      int b = Convert.ToInt32(LabelVlera.Text); 

      int c = a * b; 
      LabelVlera.Text = c.ToString(); 

      Session["Totali"] = (Session["Totali"] == null) ? 0 : Convert.ToInt32(Session["Totali"].ToString()) + c;  
     } 
    } 
} 

.aspx.cs文件

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.Configuration; 
using System.Data; 

public partial class DynamicControl : System.Web.UI.Page 
{ 
    private const string VIEWSTATEKEY = "ContactCount"; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     //Set the number of default controls 
     ViewState[VIEWSTATEKEY] = ViewState[VIEWSTATEKEY] == null ? 1 : ViewState[VIEWSTATEKEY]; 

     Session["Totali"] = 0; 

     //Load the contact control based on Vewstate key 
     LoadContactControls(); 
    } 

    private void LoadContactControls() 
    { 
     for (int i = 0; i < int.Parse(ViewState[VIEWSTATEKEY].ToString()); i++) 
     { 
      phContactDetails.Controls.Add(LoadControl("~/UserControl/ContactDetails.ascx")); 
     } 
    } 

    protected void btnAddMore_Click(object sender, EventArgs e) 
    { 
     ViewState[VIEWSTATEKEY] = int.Parse(ViewState[VIEWSTATEKEY].ToString()) + 1; 
     LoadContactControls(); 
    } 

    protected void Button1_Click(object sender, EventArgs e) 
    { 

    } 

    protected void OK_Click(object sender, EventArgs e) 
    { 

     LabelTotal.Text = Session["Totali"].ToString(); 
    } 
} 

的問題是...我怎麼能存儲的值數據庫,當我按下按鈕「德戈」(Button1_Click)?

P.S.一位朋友告訴我,問題是由用戶控件引起的,我的Page_Load事件中有重新加載,所以我得到的值始終是空的。 如果我想獲得價值,他建議我在我的用戶控件中添加一個事件,然後從事件中獲取我的輸入值。和e參考鏈接http://msdn.microsoft.com/en-us/library/fb3w5b53(v=vs.100).aspx

我聽取了他的建議,但我在2周前開始學習ASP.NET,但沒有成功。任何人都可以幫助我獲得更多信息或請寫下代碼嗎? 謝謝。

+0

通知:額外使用'viewstate'讓你的頁面重,becuz,'viewstate'保存網頁上的項目,如果你'視圖頁面source'可以看到'viewstate',也可以設置'viewstate'爲false,在你不需要'viewstate'的頁面上讓你的頁面變亮 –

回答

0

怎麼樣加載後得到的控件ID,並將它們添加到會話中,

control o = LoadControl("~/UserControl/ContactDetails.ascx"); 
(Session["controlIDList"] as List<string>).Add(o.ID); 

需要之前創建會話,也許在page load使用該

Session.Add("controlIDList", new List<string>()); 

並從會話中保存的ID列表中找到控件,然後轉換爲其類型,並獲取所需的值...

(Session["controlIDList"] as List<string>).ForEach(u => 
{ 
    var c = (TYPE_OF_USERCONTROL)this.Page.FindControl(u); 
    c.Value; // value is a property on user controls which return value of dropdown, textbox, and .... 
}); 
+0

我沒有'teamviewer' –

+0

我給你發了一封電子郵件 –

0

您需要在.ascx.cs定義屬性返回的dropdwontextbox值,並控制你需要自己的價值...... 和.aspx.csclick handler你可以閱讀usercontrol性質簡單地說,像這樣USERCONTROL_ID.DropDownValue ... DropDownValue在你的用戶控件這樣的特性:

public string DropDownValue 
    { 
     get 
     { 
      return DropDownList1.SelectedValue; 
     } 
    } 

然後你就可以保存你想要的一切在database

,你也可以有一個屬性,它返回一個包含像所有值的對象:從aspx.cs

public UserControlValue Value 
    { 
     get 
     { 
      return new UserControlValue(DropDownList1.SelectedValue, TextBox1.Text); 
     } 
    } 
public class UserControlValue 
{ 
    public UserControlValue(string property1, string property2) 
    { 
     this.property1 = property1; 
     this.property2 = property2; 
    } 

    public string property1 {get; set;} 
    public string property2 {get; set;} 
} 

和閱讀像USERCONTROL_ID.Value.property1USERCONTROL_ID.Value.property2

+0

不需要我需要以編程方式訪問這些值,而不是使用UserControlID。因爲通過按「Shto Artikull」(btnAddMore_Click)它將會添加一個UserControl。我認爲這全部來自ViewState,但我不知道如何。我不知道你是否理解我。 – aldoblack