2009-07-21 24 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#の:あなたが明示的に隠しフィールド(複数可)の値を設定しているCreateChildControlsので

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は、ページのライフサイクル(潜在的に複数回)のたびに実行されます。送信ボタンをクリックすると、クリックハンドラUpdate_PlanRisksを実行する前に、CreateChildControlsを含むライフサイクル全体にわたってページがポストバックされて再び実行されます。

この問題を回避するための最も簡単な方法は、あなたがポストバックである場合は、あなたの隠されたフィールドの値を設定する前にチェックすることです:

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

(!IsPostBack){} my string val = ""を追加すると、どのように私は注入されたJavaScriptの値にアクセスするこれを得るだろうか? – ErnieStings

2

これはリクエストから値を取得するための一つの方法です...

string point1 = Request.Form["point1"]; 
関連する問題