2014-06-16 18 views
6

Ich habe einige Probleme beim Festlegen eines Werts für ein HiddenField in ASP.NET 4.5.Festlegen eines Werts für ein HiddenField in ASP.NET 4.5

Von dem, was ich gesehen habe, habe ich versucht, die folgenden ohne Erfolg:

In ASPX:

<asp:HiddenField ID="HiddenField" runat="server" value="" /> 
<script type="text/javascript"> 
    function SetHiddenField() { 
     var vv = "HELLO WORLD"; 
     document.getElementById('<%=HiddenField.ClientID%>').value = vv;    
    } 
</script> 

In Code-Behind:

ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "SetHiddenField", "SetHiddenField();", true); 
ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "alert", "alert('" + HiddenField.ClientID + "');", true); 

Diese Warnungen Müll in die Client-ID.

Die andere Lösung, die ich ausprobiert habe, ist die folgende.

In .ASPX:

<asp:HiddenField ID="HiddenField" runat="server" value="" /> 
<script type="text/javascript"> 
    function SetHiddenField() { 
     var vv = "HELLO WORLD"; 
     document.getElementById('HiddenField').value = vv;    
    } 
</script> 

Ein Problem dabei ist, dass .value nicht in der IntelliSense nicht existiert, nur .ValueOf.

In Code-Behind:

ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "SetHiddenField", "SetHiddenField();", true); 
ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "alert", "alert('" + HiddenField.Value + "');", true); 

Es passiert nichts, wahrscheinlich ein Fehler in der JavaScript, da keine Warnung angezeigt wird.

Kann mir bitte jemand in die richtige Richtung zeigen?

+1

In Ihrem zweiten Beispiel, das Sie immer noch das Element durch den Client-ID erhalten haben, wenn Sie die Eigenschaft auf Ihrem versteckten Feld 'ClientIDMode =" Static "' –

Antwort

6

Ihre erste Auszeichnungs ist gut:

<asp:HiddenField ID="HiddenField" runat="server" value="" /> 
<script type="text/javascript"> 
    function SetHiddenField() { 
     var vv = "HELLO WORLD"; 
     document.getElementById('<%=HiddenField.ClientID%>').value = vv; 
    } 
</script> 

Ändern Sie den Code in das (die zweite Zeile überprüfen):

ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "SetHiddenField", "SetHiddenField();", true); 
ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "alert", "alert(document.getElementById('" + HiddenField.ClientID + "').value);", true); 

Und der Ausgang sollte so sein:

enter image description here

EDIT: In Ihrem Szenario können Sie Javascript ausführen einen Wert zu erhalten und einen Postbacks zu zwingen, den Wert in Ihrem Code zu verwenden. Ich würde meine Markup dies ändern:

<script type="text/javascript"> 
    function SetHiddenField() { 
     var vv = "HELLO WORLD"; 
     document.getElementById('<%=HiddenField.ClientID%>').value = vv; 
     __doPostBack('<%=HiddenField.ClientID%>', '') 
    } 
</script> 

Und in Code meine Page_Load ist wie folgt:

protected void Page_Load(object sender, EventArgs e) 
{ 

    if (!IsPostBack) 
    { 
     // Register JavaScript which will collect the value and assign to HiddenField and trigger a postback 
     ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "SetHiddenField", "SetHiddenField();", true); 
    } 
    else 
    { 
     //Also, I would add other checking to make sure that this is posted back by our script 
     string ControlID = string.Empty; 
     if (!String.IsNullOrEmpty(Request.Form["__EVENTTARGET"])) 
     { 
      ControlID = Request.Form["__EVENTTARGET"]; 
     } 
     if (ControlID == HiddenField.ClientID) 
     { 
      //On postback do our operation 
      string myVal = HiddenField.Value; 
      //etc... 
     } 
    } 

} 
+0

Perfekt, ich bekomme jetzt die richtige Ausgabe. Vielen Dank. Das Problem ist jetzt, wie ich diesen Wert in der Code-Behind-Datei erhalten werde. Das Erstellen einer neuen Javascript-Funktion zur Anzeige wird mir nicht viel helfen. Danke. – user1782815

+0

Das Skript wird ausgeführt, nachdem der Code ausgeführt wurde und die Seite gerendert wurde. Wenn Sie also auf den Wert zugreifen möchten, müssen Sie zum Code zurückkehren. Fügen Sie eine Schaltfläche hinzu und klicken Sie in den Schaltflächen auf Ereignis, um auf den versteckten Feldwert zuzugreifen: 'string myVal = HiddenField.Value;'. – afzalulh

+0

Tut mir leid, ich bin nicht sehr vertraut mit ASP.NET. Die einzige Möglichkeit besteht darin, ein Postback auf die Seite zu erzwingen, um den aktualisierten Wert zu erhalten? Was ich brauche, ist der Wert, der im Load-Event auf der Masterseite abgerufen werden muss, da der Wert benötigt wird, um einen Verweis auf einen WCF-Service hinzuzufügen. Danke. – user1782815

4

Im versteckten Feld-Tag hinzufügen clientid statisch so -

<asp:HiddenField ID="HiddenField" runat="server" value="" ClientIDMode="Static" /> 

Auf diese Weise ASP.Net wird es nicht mit dynamischer ID ersetzen und hat immer die ID, die Sie zur Verfügung gestellt, so wird es jetzt hat ID HiddenField . Dann sollte dein zweiter Versuch funktionieren.

Mehr finden Sie hier -

http://msdn.microsoft.com/en-us/library/system.web.ui.control.clientidmode(v=vs.110).aspx

+0

Großartig, ich könnte einen Schritt näher kommen.Ich habe das jetzt versucht, aber ich kann die ClientID nicht aktualisieren oder einen Wert darauf setzen (da es statisch ist, denke ich). Der Wert ist 'HiddenField'. – user1782815

Verwandte Themen