2009-07-21 88 views
2

我已經在C#代碼隱藏文件中動態創建隱藏的輸入控件,然後用JavaScript填充它們的值。我現在想要在C#中訪問這些變量。訪問由JavaScript編輯的隱藏輸入值

Firebug顯示值會隨JavaScript改變,但我將原始值返回到後面的代碼中。任何有識之士將不勝感激。

的JavaScript:

function injectVariables(){ 
    var hidden = document.getElementById("point1"); 
    hidden.value = 55; 
    var hidden2 = document.getElementById("point2"); 
    hidden2.value = 55; 
    var hidden3 = document.getElementById("point3"); 
    hidden3.value = 55; 
    alert("values changed"); 
} 

ASPX:

<asp:Button OnClick="Update_PlanRisks" OnClientClick="injectVariables()" Text="updatePlanRisks" runat="server" /> 

C#:

protected override void CreateChildControls() 
{ 
    base.CreateChildControls(); 
    int planId = Convert.ToInt32(Request.QueryString.Get("plan")); 
    planRisks = wsAccess.GetPlanRiskByPlanId(planId); 

    foreach (PlanRisk pr in planRisks) 
    { 
     HtmlInputHidden hiddenField = new HtmlInputHidden(); 
     hiddenField.ID= "point" + pr.Id; 
     hiddenField.Name = "point" + pr.Id; 
     hiddenField.Value = Convert.ToString(pr.Severity); 
     this.Controls.Add(hiddenField); 
    } 
} 

protected void Update_PlanRisks(object sender, EventArgs e) 
{ 
    foreach (PlanRisk pr in planRisks) 
    { 
     int planRiskId = pr.Id; 
     string planRiskName = "point" + pr.Id; 
     HtmlInputHidden hiddenControl = (HtmlInputHidden) FindControl(planRiskName); 
     string val = hiddenControl.Value; 
    } 
} 

回答

0

在CreateChildControls中,你明確地設定了隱藏字段(S)的值。每次在頁面生命週期(可能多次)中都會運行CreateChildControls,當您單擊提交時,頁面會回發並在運行Click處理程序Update_PlanRisks之前再次運行整個生命週期(包括CreateChildControls)。

避免這個問題的最簡單的方法是檢查,如果你是在回傳設置你的隱藏字段的值之前:

if(!IsPostBack) 
{ 
    hiddenField.Value = Convert.ToString(pr.Severity); 
} 
+0

當我添加(!IsPostBack){}我的字符串val =「」。我怎麼會得到這個訪問注入的JavaScript值? – ErnieStings 2009-07-21 16:12:29

2

這是獲得來自請求的值的一種方式......

string point1 = Request.Form["point1"];