2

C#の分離コードファイルに非表示の入力コントロールを動的に作成し、それらの値にJavaScriptを入力しました。ここで、C#でこれらの変数にアクセスしたいと思います。

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;
    }
}
4

2 に答える 2

2

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

string point1 = Request.Form["point1"];
于 2009-07-21T17:21:08.233 に答える
0

CreateChildControlsでは、非表示フィールドの値を明示的に設定しています。CreateChildControlsは、ページのライフサイクル中に毎回(場合によっては複数回)実行されます。[送信]をクリックすると、ページはポストバックし、クリックハンドラーUpdate_PlanRisksを実行する前に、CreateChildControlsを含むライフサイクル全体を再度実行します。

この問題を回避する最も簡単な方法は、非表示フィールドの値を設定する前に、PostBackにいるかどうかを確認することです。

if(!IsPostBack)
{
    hiddenField.Value = Convert.ToString(pr.Severity);
}
于 2009-07-21T16:00:40.627 に答える