【问题标题】:How do I call a method from aspx file?如何从 aspx 文件中调用方法?
【发布时间】:2016-02-24 20:56:22
【问题描述】:

我正在尝试从我的 aspx 文件中调用一个方法,该方法与页面 Inherit 中定义的类相同。

方法定义如下:

foo.aspx.cs

   public void GeneratePartiesOptionsList()
        {
           //parties is a non-empty static readonly array of string[] type
            Debug.WriteLine("GeneratePartiesOptionsList() called");
            foreach(string party in parties)
            {
                Response.Write(string.Format("<option value='{0}'>{0}</option>{1}", party, Environment.NewLine));
            }
        }

从 foo.aspx,我这样调用:

<select id="list" runat="server">
                            <%
                                this.GeneratePartiesOptionsList();
                             %>
                        </select>

但是当我打开 foo.aspx 页面时,我没有得到任何东西,既没有我想要生成的内容,也没有错误。选择是空的。我错过了什么?我是 ASP.NET/WebForms 的新手。

【问题讨论】:

  • 你能告诉我们为什么你会用Response.Write而不是数据绑定来填充选择列表吗?
  • 因为我是 ASP.NET 新手,对此我一无所知。你能举一个更好的例子吗?
  • 文本框,并且 c# 函数返回一个字符串,就像 philip pittle 建议的那样,现在对于
  • 我现在使用list.Items.Add()。将GeneratePartiesOptionsList() 调用移动到构造函数。工作得很好!但是,如果有更好的方法来做到这一点,我也想听听。 很丑。我使用是因为我不知道其他东西,而不是
  • @Jack 在 ASP.Net Web 表单 中,你的做法真的很奇怪。你不能使用 DropDownList 服务器控件吗?如果没有,你想达到什么目的?

标签: c# asp.net .net webforms


【解决方案1】:

因此,Response.Write 在 ASP.NET 中通常不是一个好主意,因为它的运行时间与您预期的不同。奇怪的是,您预期的文本在交付页面的某个位置(我认为它会在底部),但不在有用的 HTML 块中。

如果您想走这条路,那么您希望您的代码隐藏方法返回一个string,然后使用&lt;%= this.GeneratePartiesOptionsList() %&gt; 语法,这将使 ASP.NET 将其输出到您期望的位置。

你应该看看数据绑定,因为像这样写出 HTML 是 WebForms 的上游......

【讨论】:

    【解决方案2】:

    如果我没记错使用&lt;% %&gt; 语法,您的方法需要返回string,并且该字符串由aspx 页面直接写入响应。所以:

    public string GeneratePartiesOptionsList()
    {
           //parties is a non-empty static readonly array of string[] type
            Debug.WriteLine("GeneratePartiesOptionsList() called");
    
            return string.Join(
                Environment.NewLine
                parties.Select(
                   party => 
                    string.Format("<option value='{0}'>{0}</option>", party));
    }
    

    【讨论】:

    • 我认为将依赖于平台的Environment.NewLine 用于将要输出到其他计算机的内容不是一个好习惯。而是使用 "\r\n""\n",具体取决于您在其他地方的 HTML 代码使用什么。
    • @MattiVirkkunen - 这是一个有趣的观点。我通常使用Environment.NewLine,因为它应该为当前执行环境获取正确的换行符。对于 HTML 文档而言,它应该没有那么重要,因为空格通常会被忽略,但如果 OP 遇到问题,那么它当然应该更新。
    • 这在 HTML 中不是一个真正的问题,因为空格被忽略了。但关键是当您将数据发送给其他人或将其存储在可能发送给其他人的文件中时,您确实想要当前环境的换行符,您想要完全正确的一。 Environment.NewLine 可用于控制台输出和创建仅在本地使用的文件。
    【解决方案3】:
    <asp:TextBox ID="txtInside" runat="server" Text='<%# ShowMeQte() %>' ></asp:TextBox> 
    

    也许这只是你缺少的#?

    【讨论】:

    • # 是一个数据绑定符号,用于传递要由您传递给的控件解释的内容。除非像您在此处使用的那样,在另一个控件中使用,否则它不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    相关资源
    最近更新 更多