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

这是从请求中获取价值的一种方法......

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

在 CreateChildControls 中,您明确设置隐藏字段的值。CreateChildControls 在页面生命周期中每次运行(可能多次),当您单击提交时,页面回发并再次运行整个生命周期 - 包括 CreateChildControls - 在运行点击处理程序 Update_PlanRisks 之前。

避免此问题的最简单方法是在设置隐藏字段的值之前检查您是否在 PostBack 中:

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