2016-09-21 1 views
0

Ich habe Webformular und JavaScript-Funktion wie folgt aus:Pass ausgewählten Wert Serverseite Dropdown-Liste JavaScript-Funktion

Webformular

<div> 
    <asp:DropDownList runat="server" ID="ddlType"> 
     <asp:ListItem Value="1" Text="Type1"></asp:ListItem> 
     <asp:ListItem Value="2" Text="Type2"></asp:ListItem> 
    </asp:DropDownList> 
    <asp:LinkButton ID="lnkTest" OnClientClick='<%= "getValue('0' + '|' + 'ddlType.SelectedValue');return false;" %>' runat="server" Text="text"> 
          new 
    </asp:LinkButton> 
</div> 

JavaScript-Funktion

<script> 
    function getValue(Input) {  
     var result = Input.split("|"); 
     section1 = result[0]; 
     section2 = result[1]; 
    } 
</script> 

I Notwendigkeit, die Zeichenfolge zu übergeben, umfasst '0' (fest codiert) und ddlType.SelectedValue zu getValue. Dieses Webformular hat Syntaxfehler Server tags cannot contain <% ... %> constructs (ich weiß). Ich kann ausgewählten Wert von getElementById erhalten, aber ich möchte SelectedValue als Argument übergeben. Ich habe viele Beiträge gelesen, aber keine von ihnen gibt keine SelectedValue.

Es wäre sehr hilfreich, wenn jemand die Lösung für dieses Problem erklären könnte.

Antwort

0

SelectedValue ist ein serverseitiger Wert. Es ist für den serverseitigen Code beim Laden der Seite verfügbar (d. H. Bevor die Seite für den Benutzer gerendert wird). In Javascript hat es überhaupt keine Bedeutung und ist nicht verfügbar, wenn ein Benutzer auf den Link klickt.

Wenn Sie den ausgewählten Wert auf der Client-Seite bekommen möchten, können Sie etwas tun:

Erste des ganzen von Ihrem Linkbutton OnClientClick Code loszuwerden.

Zweitens einige Javascript wie folgt schreiben (am unteren Rand der Seite, nachdem alle Ihre HTML/ASP-Markup:

document.getElementById("<%=lnkTest.ClientID %>").addEventListener("click", function(event) { 
    event.preventDefault(); //stop default action of the link button, to allow script to execute 
    var selectedVal = document.getElementById("<%=ddlType.ClientID %>").value; 
    getValue('0|' + selectedVal); 
}); 

Dieser den Browser für einen Benutzer durch Klick auf den Button zu hören verursachen, und Führen Sie dann die angegebene JS-Funktion aus Diese Funktion ruft den aktuell ausgewählten Wert des Dropdown-Menüs ab (wie im Browser ausgewählt - der Server hat keine Ahnung, was ausgewählt wurde, weil kein Postback stattgefunden hat) und übergibt diesen ausgewählten Wert an Ihre vorhandene getValue-Funktion .

NB Falls Sie sich fragen, der Grund, warum ich die contr Der Grund dafür liegt darin, dass ASP.NET die clientseitige ID jedes Elements basierend auf der Struktur der serverseitigen Steuerelemente, in denen es liegt, dynamisch erstellt. Wenn Sie sich also direkt auf die serverseitige ID verlassen (z. B. "ddlType"), wird das Element im gerenderten DOM nicht zuverlässig identifiziert. .NET stellt den ClientID-Wert zur Laufzeit bereit, um auf die generierte ID zugreifen zu können.

+0

Danke für answer.Ich denke 'document.getElementById (" <% = lnkTest.ClientID%> "). AddEventListener (" click ", Funktion (event)' in Ihrem Code entspricht "OnClientClick". Aber ich brauche Übergeben Sie "Wert" von "ddlType" in "OnClientClick" -Ereignis als Argument. Dann habe ich "ddlType.ClientID" in "OnClientClick" getestet, funktioniert aber nicht ordnungsgemäß. –

+0

Nein, Sie müssen das nicht tun, hauptsächlich weil Sie _can't_, wie ich bereits erklärt habe.Meine Version ist die Entsprechung mit der richtigen clientseitige Code und produziert das gewünschte Ergebnis. – ADyson

+0

Sind Sie sicher, dass ich nicht 'selectedValue' als Argument übergeben kann? –

Verwandte Themen