2009-07-21 2 views
2

Ich habe verborgene Eingabesteuerelemente in einer C# -Code-Behind-Datei dynamisch erstellt und anschließend ihre Werte mit JavaScript gefüllt. Ich möchte nun auf diese Variablen in C# zugreifen.Zugreifen auf versteckte Eingabewerte, die von JavaScript bearbeitet wurden

Firebug zeigt, dass die Werte mit JavaScript ändern, aber ich bekomme die ursprünglichen Werte zurück in den Code hinter. Jede Einsicht würde sehr geschätzt werden.

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

Antwort

0

In Create werden Sie explizit den Wert der ausgeblendeten Feld Einstellung (s). CreateChildControls wird jedes Mal während des Seitenlebenszyklus (möglicherweise mehrmals) ausgeführt. Wenn Sie auf "Senden" klicken, wird die Seite erneut gepostet und durchläuft den gesamten Lebenszyklus erneut - einschließlich CreateChildControls -, bevor der Klick-Handler Update_PlanRisks ausgeführt wird.

Der einfachste Weg, dieses Problem zu vermeiden, wenn Sie in Postback sind zu überprüfen, bevor Sie den Wert Ihrer verborgenen Felder einstellen:

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

wenn ich die (! IsPostBack) {} meine Zeichenfolge val = "" hinzufügen. Wie würde ich dies erhalten, um auf den injizierten Javascript-Wert zuzugreifen? – ErnieStings

2

Dies ist eine Möglichkeit, den Wert aus der Anfrage zu bekommen ...

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