【问题标题】:Using an HTML button to call a method ASP .NET使用 HTML 按钮调用方法 ASP .NET
【发布时间】:2016-08-19 21:48:49
【问题描述】:

我正在从我的数据库中获取一组值。我正在使用 HTML 表格来显示这些获取的值。所有这些都是通过一个函数执行的,我从 ASPX 页面调用该函数。我的问题是,如何通过按钮(使用 On_Click 方法)调用相同的函数,而不是在 aspx 页面上调用它。

C# 代码示例:

 public string getWhileLoopData()
{
        string htmlStr = "";
        SqlConnection thisConnection = new SqlConnection(dbConnection);
        SqlCommand thisCommand = thisConnection.CreateCommand();
        thisCommand.CommandText = "SELECT * from Test";
        thisConnection.Open();
        SqlDataReader reader = thisCommand.ExecuteReader();

        while (reader.Read())
        {
            int id = reader.GetInt32(0);
            string Name = reader.GetString(1);
            string Pass = reader.GetString(2);
            htmlStr +="<tr><td>"+id+"</td><td>"+Name+"</td><td>"+Pass+"</td></tr>"                   
        }

        thisConnection.Close();
        return htmlStr;
}

ASPX 代码示例:

<%@ Page Language="C#" AutoEventWireup="true" MasterPageFile="~/test.master" CodeFile="test.aspx.cs" Inherits="test" %>

<asp:Content ID="BodyContent" runat="server"  ContentPlaceHolderID="ContentPlaceHolder">
    <table width="100%" align="center" cellpadding="2" cellspacing="2" border="0" bgcolor="#EAEAEA" >
        <tr align="left" style="background-color:#004080;color:White;" >
            <td> ID </td>                        
            <td> Name </td>            
            <td>Pass</td>                        
        </tr>

        <%=getWhileLoopData()%>

    </table>
</asp:Content>

所以基本上,我想在 ASPX 页面上放置一个按钮并通过该按钮调用 &lt;%=getWhileLoopData()%&gt;

谢谢。

【问题讨论】:

  • 您不会像那样从页面调用函数背后的代码。为什么不让它在一开始就完全加载呢?
  • 我需要使用一个按钮来使用相同的表执行类似的提取操作,但只使用不同的查询。如,假设我首先使用 SELECT * FROM 操作,下一个我想使用带有一些 where 子句的 Select 查询。 @亚历山大
  • 您是否尝试过仅实现asp:button 并对点击事件背后的代码进行数据处理(过滤?)?
  • @Alexander 我尝试通过按钮调用它。虽然我没有收到任何错误,但数据并没有在运行时显示在页面上。
  • 向我们展示您的尝试。

标签: c# html asp.net webforms


【解决方案1】:

一种方法是使用普通的asp.net button 并在literal 上呈现结果

<asp:Literal runat="server" ID="txtOnMe" EnableViewState="false"></asp:Literal>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />

以及背后的代码

protected void Button1_Click(object sender, EventArgs e)
{
    txtOnMe.Text = getWhileLoopData() ; // "text to show";
}

还有其他方式……这个最接近asp.net

【讨论】:

    【解决方案2】:

    使用转发器来呈现重复的 HTML,而不是在代码隐藏文件中制作 HTML 字符串,然后将其呈现到 .ASPX 文件中。中继器快速且易于处理。

    <%@ Page Language="C#" AutoEventWireup="true" MasterPageFile="~/test.master" CodeFile="test.aspx.cs" Inherits="test" %>
    <asp:Content ID="BodyContent" runat="server"  ContentPlaceHolderID="ContentPlaceHolder">
        <asp:Repeater id="myRpt" runat="server">
            <HeaderTemplate>
                <table width="100%" align="center" cellpadding="2" cellspacing="2" border="0" bgcolor="#EAEAEA" >
                    <tr align="left" style="background-color:#004080;color:White;" >
                        <td> ID </td>
                        <td> Name </td>
                        <td>Pass</td>
                    </tr>
            </HeaderTemplate>
            <ItemTemplate>
            <tr>
            <td><%# Eval("ID") %></td>
            <td><%# Eval("Name") %></td>
            <td><%# Eval("Pass") %></td>
            </tr>
            </ItemTemplate>
            <FooterTemplate>
            </table>
            </FooterTemplate>
        </asp:Repeater>
    </asp:Content>
    

    在你的代码后面的文件中

     SqlConnection thisConnection = new SqlConnection(dbConnection);
            SqlCommand thisCommand = thisConnection.CreateCommand();
            thisCommand.CommandText = "SELECT * from Test";
            thisConnection.Open();
            SqlDataReader reader = thisCommand.ExecuteReader();
    
    myRpt.DataSource = reader ;
            myRpt.DataBind();
    

    【讨论】:

    • 虽然技术上是正确的,但我看不出它与这个问题有什么关系。
    • 从 String 对象生成 html 不是一个好习惯,因为在循环中连接字符串会创建 N 个对象引用。这不是一个好方法。 @亚历山大
    • 它是如何创建对象引用的?
    猜你喜欢
    • 2014-03-31
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多