2009-07-21 91 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"];