Hallo zusammen, ich versuche herauszufinden, was ich hier falsch mache. Zu Ihrer Information, ich bin neu bei ASP.net und seinen Möglichkeiten: o):

<asp:ListBox ID="df_dd_ccyear" name="df_dd_ccyear" style="z-index: 1000;" runat="server" ClientIDMode="Static">
      <script type="text/javascript">
         var d = new Date();
         var curr_year = d.getFullYear();
         var i = 1;

         while (i < 20) {
             if (i == 1) {
                 document.write('<asp:ListItem Text=\"' + (curr_year + i) + '\" value=\"' + (curr_year + i) + '\" Selected=\"True\"></asp:ListItem>');
             } else {
                 document.write('<asp:ListItem Text=\"' + (curr_year + i) + '\" value=\"' + (curr_year + i) + '\"></asp:ListItem>');
             }
             i++;
         }
      </script>
</asp:ListBox>

Beim Ausführen der Seite erhalte ich folgende Fehlermeldung:

Parser Error

Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately. 

Parser Error Message: System.Web.UI.WebControls.ListItemCollection must have items of type 'System.Web.UI.WebControls.ListItem'. 'script' is of type 'System.Web.UI.HtmlControls.HtmlGenericControl'.

Source Error: 


Line 200:                    <div id="df-ccyear" style="z-index: 1000;">
Line 201:                        <asp:ListBox ID="df_dd_ccyear" name="df_dd_ccyear" style="z-index: 1000;" runat="server" ClientIDMode="Static">
**Line 202:                            <script type="text/javascript">**
Line 203:                                var d = new Date();
Line 204:                                var curr_year = d.getFullYear();

Source File: /chattclub/default.aspx    Line: 202 
0
StealthRT 8 Okt. 2012 im 17:18

4 Antworten

Beste Antwort

Ich schlage vor, Code dahinter immer zu verwenden, wie Sie können (wie in diesem Fall). Auf diese Weise können Sie dasselbe wie folgt tun:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim currentYear As Integer = Date.Now.Year
    For i As Integer = 0 To 19
        Dim newItem As New ListItem
        newItem.Text = currentYear + i
        newItem.Value = currentYear + i
        newItem.Selected = False
        If i = 0 Then
            newItem.Selected = True
        End If
        df_dd_ccyear.Items.Add(newItem)
    Next
End Sub

In der Markup-Datei (der ASPX-Datei) müssen Sie nur das ListBox wie folgt deklarieren:

<asp:ListBox ID="df_dd_ccyear" style="z-index: 1000;" runat="server" />
2
adripanico 8 Okt. 2012 im 13:33

Auf diese Weise können Sie Javascript und serverseitigen Code nicht mischen. Javascript wird auf dem Client ausgeführt, während ASP.NET auf dem Server ausgeführt wird.

Ihre erste Möglichkeit besteht also darin, es auf dem Server zu erstellen:

<asp:ListBox 
    ID="df_dd_ccyear" 
    name="df_dd_ccyear" 
    style="z-index: 1000;" 
    runat="server" 
    ClientIDMode="Static" 
/>

Und in Ihrem Code dahinter:

protected void Page_Load(object sender, EventArgs e)
{
    var currentYear = DateTime.Now.Year;
    var years = Enumerable.Range(currentYear, 20);
    df_dd_ccyear.DataSource = years;
    df_dd_ccyear.SelectedIndex = 0;
    df_dd_ccyear.DataBind();
}

Oder wenn Sie möchten, dass eine reine Javascript-Lösung Elemente zur Listbox hinzufügt:

<%@ Page 
    Language="C#" 
    AutoEventWireup="true" 
    CodeBehind="Default.aspx.cs" 
    Inherits="WebApplication1.Default" 
%>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ListBox 
            ID="df_dd_ccyear" 
            name="df_dd_ccyear" 
            style="z-index: 1000;" 
            runat="server" 
            ClientIDMode="Static" 
        />

        <script type="text/javascript">
            var years = document.getElementById('df_dd_ccyear');
            var d = new Date();
            var curr_year = d.getFullYear();

            for(var i = 0; i < 20; i++) {
                if (i == 0) {
                    years.innerHTML += '<option value="' + curr_year + '" selected="selected">' + curr_year + '</option>';
                } else {
                    years.innerHTML += '<option value="' + (curr_year + i) + '">' + (curr_year + i) + '</option>';
                }
            }
        </script>
    </form>
</body>
</html>
2
Darin Dimitrov 8 Okt. 2012 im 13:24

Das kannst du nicht machen. Die ASP-Tags werden auf dem Server ausgeführt. JavaScript wird auf der Clientseite ausgeführt. Sie müssen Elemente an anderer Stelle dynamisch zum Javascript hinzufügen / daraus entfernen.

Wenn Sie sich den Code ansehen, ist es möglicherweise am sinnvollsten, diesen in C # / VB in Ihrem Codebehind zu schreiben.

0
Daniel A. White 8 Okt. 2012 im 13:20

Sie können die Listenelemente nicht als HTML schreiben, sie müssen von asp.net als Auswahloptionen in HTML gerendert werden.

In Ihrem Code sollten Sie Folgendes tun:

    For i = 0 to 20
       df_dd_ccyear.items.add(currYear);
    End For

Weitere Informationen zum Hinzufügen von Listenelementen finden Sie unter: http://forums.asp.net/t/1142484 .aspx / 1

2
Ryan McDonough 8 Okt. 2012 im 13:25