【问题标题】:ASP.NET Eventhandler Not workingASP.NET 事件处理程序不起作用
【发布时间】:2013-09-12 22:17:33
【问题描述】:

我有一个非常直接的动态生成的 asp 页面。这是我第一次使用动态生成的 asp 控件。该表正确呈现,但是当我单击“查询”按钮时,我无法让事件连接到“OnClick”方法。我收到网页错误“'ButtonClick' 未定义”。为了简洁起见,我已经剥离并简化了代码。

设备状态.aspx

<%@ Page Title="Device Status" Language="C#" MasterPageFile="Secure.master"
'AutoEventWireup="true" CodeFile="DeviceStatus.aspx.cs" Inherits="Devices" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"></asp:Content>

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">

<div id="selectDiv" runat="server"></div>

</asp:Content>

DeviceStatus.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;


public partial class Devices : System.Web.UI.Page
{

protected void Page_Load(object sender, EventArgs e) {

    int i, NumberOfDevices = 3;
    string Contents;
    string[] number = new string[] { "1", "2", "3"};
    string[] name = new string[] {"mike", "bob", "cindy"};
    string[] location = new string[] { "Austin", "Miami", "Atlanta" };     

    // Create event binding
    PlaceHolder Placeholder1 = new PlaceHolder();
    Button button = new Button();
    button.Text = "Click";
    button.Click += new System.EventHandler(ButtonClick);
    Placeholder1.Controls.Add(button);

    //Create Form and table header
    Contents = "<form runat=\"server\"><table border=\"1\" >";
    Contents += "<tr><th>Select</th><th>Number</th><th>Name</th><th>Status</tr>";

    // Repeat for each table row
    for (i = 0; i < NumberOfDevices; i++) {

        // Creat each row
        Contents += "<tr><td><asp:Button ID=\"row" + i + "\""    
             + "runat=\"server\"OnClick=\"ButtonClick\" >Query</asp:Button></td>"
             + "<td>" + number[i] + "</td><td>" + name[i] + "</td><td>"
             + location[i] + "</td></tr>";
    }

    // Cleanup
    Contents += "</table>";
    Contents += "<asp:PlaceHolder ID=\"Placeholder1\" runat=\"server\"></asp:PlaceHolder>";
    Contents += "</form>";
    Contents += "</asp:Content>";

    //Place dynamic asp controls in webpage
    selectDiv.InnerHtml = Contents; 
}


protected void ButtonClick(object sender, EventArgs e)
{
    Response.Redirect("DataRendering.aspx");
}



}

【问题讨论】:

  • 这是 HTML#。 HTML# 使用 C# 将 HTML(尤其是 ASP 控件)输出到页面。你想达到什么目的?让我们从那里开始。
  • 您不能像这样从代码隐藏创建 asp.net 控件。看看这个:msdn.microsoft.com/en-us/library/kyt0fzt1.aspx
  • 再看这个,我认为你不需要动态生成任何东西。只需使用带有选择列的 GridView。
  • Hello Garrison...在这个小 sn-p 之前和之后有大量代码,但基本上我从 Web 服务获取一个序列化的 xml 对象,我想呈现一个反序列化的表xml 对象。该表在第一列中有一个按钮,单击该按钮将到达 ButtonClick。我用 ID=row# 对每一行进行唯一标识,这样我就可以确定点击了哪一行。 ButtonClick 然后整理行数据,做一些工作然后重定向到新页面。我已将所有这些代码提取出来以使其更具可读性。
  • 你好 Garrison...是的,我会看看 Gridview。几年前我用过它。但是,您能确定我在这里做错了什么吗?它在我的代码中的其他地方有应用......谢谢。

标签: asp.net c#-4.0 webforms


【解决方案1】:

我接受了加里森的建议。花了一些时间来弄清楚代码,但一旦完成是最直接的解决方案。感谢大家的贡献。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 2018-09-22
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多