【问题标题】:How can I get a custom made set of checkboxes return values in the postback?如何在回发中获得一组定制的复选框返回值?
【发布时间】:2011-02-03 15:19:27
【问题描述】:

我在一个 aspx 页面中有以下内容:

<td colspan="2">
    <% DisplayParties(); %>
</td>

在 aspx 页面后面的代码中,我有这个(例如,我为复选框构建 HTML):

public void DisplayParties() {
    var s = new StringBuilder();
    s.Append("<input type=\"checkbox\" id=\"attorney\" value=\"12345\"/>");
    s.Append("<input type=\"checkbox\" id=\"attorney\" value=\"67890\"/>");
    s.Append("<input type=\"checkbox\" id=\"adjuster\" value=\"125\"/>");
    Response.WriteLine(s.ToString());
}

不是我最自豪的时刻,但无论如何。问题是当这个页面通过页面上的某个事件发回时,我从来没有在 Request.Form 集合中得到这些标签。

这仅仅是 ASP.NET 的工作方式(例如,只有服务器端控制回发)还是我遗漏了一些简单的东西。

我的理解是回发应该带回所有表单变量。

【问题讨论】:

    标签: asp.net visual-studio-2008 .net-3.5 postback


    【解决方案1】:

    您需要使用 name 属性而不是 ID(并且不要重复 attorney 作为名称):

    public void DisplayParties() {
        var s = new StringBuilder();
        s.Append("<input type=\"checkbox\" name=\"attorney\" value=\"12345\"/>");
        s.Append("<input type=\"checkbox\" name=\"other_attorney\" value=\"67890\"/>");
        s.Append("<input type=\"checkbox\" name=\"adjuster\" value=\"125\"/>");
        Response.WriteLine(s.ToString());
    }
    

    请注意,只有在检查相应的复选框时,才会发送相应的名称/值。即,如果选中 attorneyadjuster 复选框,则在 POST 中的某处您将看到:...attorney=12345&amp;adjuster=125...

    【讨论】:

      【解决方案2】:

      这不是你应该在 ASP.NET 中做事的方式,有一些服务器控件旨在让我们作为程序员的生活更轻松,并将代码与 UI 分开。但无论如何,为了让它按照您的方式工作,Request.Form 将按名称提取内容。将名称字段添加到您的控件。

      【讨论】:

      • 我不能再支持你了,因为我 100% 同意。不幸的是,该模式已被某人制定,我只是在遵循它。
      【解决方案3】:

      我不太确定,但我认为您缺少表单标签。

      <form method="post" action="PageName.aspx"> 
      
         //your code
      
      </form>
      

      【讨论】:

      • 有一个表单标签,因为其他所有内容都会回发(我确实在浏览器的“查看源代码”窗口中也看到了它。
      猜你喜欢
      • 2018-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-15
      • 2011-08-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-10
      相关资源
      最近更新 更多