【问题标题】:ASP.NET DataList - JavaScript Validation Of All TextboxesASP.NET DataList - 所有文本框的 JavaScript 验证
【发布时间】:2009-05-14 14:08:49
【问题描述】:

简单设置:数据列表形式的购物车。

标题有两个按钮:更新数量和删除所选项目

每个 DataList 项目(除其他外)都有一个 id="txtQty" 的文本框,用于存储购物车项目的数量。

用户应该能够更改这些文本框中的值,然后点击标题中的更新数量按钮以一次保存所有更改。

我已经完成了实际保存的逻辑,但现在我要回去添加一些额外的验证。我希望从 UpdateQuantities 按钮的 OnClientClick 事件中调用单个 JavaScript 函数,然后该函数将遍历所有 DataListItems,找到 txtQty 文本框,并确保它是有效的数字输入。

我很难找出解决此问题的最佳方法。到目前为止,我唯一真正的想法是遍历表单元素并找到任何具有与“txtQty”匹配的 id 的内容(因为 ASP.NET 会自动重写 id),然后验证该特定元素。这听起来不是最好的解决方案。有没有更好的想法?

【问题讨论】:

    标签: asp.net javascript validation datalist


    【解决方案1】:

    为什么不在您的 DataGrid 上放置一个验证器来检查数量是否是有效数字?这将是迄今为止最简单的。

    如果这不是解决方案,我会让所有这些 txtQty 文本框都具有相同的 css 类。然后,您可以使用 JQuery 查找具有该类名的所有元素并遍历它们。这比遍历整个表单并检查元素的 id 是否在其 id 中包含“txtQty”要好得多。

    另一种方法是创建一个隐藏字段,其中包含您要检查的文本框的所有 ID。您将在添加文本框时添加到此隐藏字段。然后只需在 id 数组中分解隐藏字段,然后找到那些 id。

    【讨论】:

      【解决方案2】:

      我最终使用了一些 LongHorn 的方法来获得我想要的结果。使用自定义验证器,我使用它的客户端验证功能来调用一个 JS 函数,该函数检查文本更改事件中的单个文本框。

      这不是我理想的解决方案,但它很有用。在进行任何处理之前,我还会对整个列表进行服务器端验证,以防万一。

      【讨论】:

      • 始终在两端验证。服务器和客户端。为了保护自己。我也在数据层再次验证。
      【解决方案3】:

      重复的 ID 确实不是一件好事。您可以尝试为文本框分配一个类 - “验证数量”会很好,因为您可以应用多个类作为验证规则。

      <input type="textbox" class="validate-quantity validate-min" />
      

      这样您就可以遍历表单以查找您的验证规则,而不是针对特定的文本框。

      【讨论】:

      • 就 ID 而言,我真的没有选择,因为 aspx 页面实际上只有一个 ItemTemplate,它是为数据列表中的每个项目呈现的内容。然后 ASP.NET 会将 id "txtQty" 转换为 name="ctl00$content$dlCartDetails$ctl02$txtQty" 这样 id 就不会真正发生冲突。
      • 是的,.NET 的 ID 系统让我发疯了一阵子。这就是目标类更容易的原因。要么,要么做页面级javascript并使用txtQty.ClientID
      【解决方案4】:

      为什么不将验证添加为每个文本框的 onchange 事件的属性。当他们进行更改时,您最好进行验证。

      您可以添加验证控件或滚动自己的控件。

      【讨论】:

        猜你喜欢
        • 2011-08-05
        • 2011-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多