0

ここで私が間違っていることを理解しようとしています。参考までに、私はASP.netとその方法が初めてです: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>

ページを実行すると、次のエラーが表示されます。

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 
4

4 に答える 4

2

コードビハインドを使用することをお勧めします (この場合のように)。このようにして、次のように同じことができます。

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

マークアップ ファイル (.ASPX ファイル) では、次のListBoxように宣言するだけです。

<asp:ListBox ID="df_dd_ccyear" style="z-index: 1000;" runat="server" />
于 2012-10-08T13:26:46.547 に答える
2

リスト項目を html として書き込むことはできません。選択オプションとして、asp.net によって html にレンダリングする必要があります。

コードでは、次の行に沿って何かを行う必要があります。

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

listitems の追加の詳細については、http://forums.asp.net/t/1142484.aspx/1 を参照してください。

于 2012-10-08T13:25:42.390 に答える
2

このように JavaScript とサーバー側コードを混在させることはできません。JavaScript はクライアントで実行されますが、ASP.NET はサーバーで実行されます。

したがって、最初の可能性は、サーバー上に構築することです。

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

そしてあなたのコードビハインドで:

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

または、リストボックスに項目を追加する純粋な JavaScript ソリューションが必要な場合:

<%@ 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>
于 2012-10-08T13:24:21.750 に答える
0

これはできません。ASP タグはサーバー上で実行されます。JavaScript はクライアント側で実行されます。他の場所で JavaScript からアイテムを動的に追加/削除する必要があります。

コードを見ると、コード ビハインドでこれを C#/VB で記述するのが最も理にかなっているかもしれません。

于 2012-10-08T13:20:15.933 に答える