1

我正在使用 WebForms GridView 控件。当用户单击一行上的“更新”时,我想检查他们输入的值与其他一些记录。

从那以后,如果我返回 true,我想显示一个确认对话框,询问用户是否愿意继续更新。

javascript 确认对话框可能不起作用,因为我并不总是想显示此对话框,只有当输入的值满足特定条件时。

有什么建议么?

4

2 回答 2

2

我建议使用该RowDataBound事件来检查这些条件并在需要时添加确认对话框。

编辑:比较日期并在它们不同时显示确认

请参阅此jsFiddle进行演示。

<script type="text/javascript">        
   validateInput = function(inputDate, compareDate, confirmButtonID) {           
       var confirmButton = document.getElementById(confirmButtonID);       
       if (confirmButton) {               
           $(confirmButton).one("click", function() {
               var result = dates.compare(inputDate, compareDate);
               if (result != 0){ //change to suit your needs
                   return confirm("Are you sure you want to save these changes?");        
               }
               return true;
           });                                                                                 
       }
    }             
</script>

这是dates用于比较的类的代码(链接):

<script type="text/javascript">
    var dates = {
        convert:function(d) {
            return (
                d.constructor === Date ? d :
                d.constructor === Array ? new Date(d[0],d[1],d[2]) :
                d.constructor === Number ? new Date(d) :
                d.constructor === String ? new Date(d) :
                typeof d === "object" ? new Date(d.year,d.month,d.date) :
                NaN
            );
        },
        compare:function(a,b) {
            return (
                isFinite(a=this.convert(a).valueOf()) &&
                isFinite(b=this.convert(b).valueOf()) ?
                (a>b)-(a<b) :
                NaN
            );
        },
        inRange:function(d,start,end) {
           return (
                isFinite(d=this.convert(d).valueOf()) &&
                isFinite(start=this.convert(start).valueOf()) &&
                isFinite(end=this.convert(end).valueOf()) ?
                start <= d && d <= end :
                NaN
            );
        }
    }
</script>

在 的RowDataBound情况下,为每一行GridView分配函数:onchange

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    var inputCtrl = e.Row.FindControl("txtEnteredDate") as TextBox;
    if (inputCtrl != null)
    {
        var updateButtonCtrl = e.Row.FindControl("btnUpdate") as Button;
        if (updateButtonCtrl != null)
        {
            inputCtrl.Attributes["onchange"] = string.Format("return validateInput(this.value, '{0}', '{1}');", DataBinder.Eval("DateToCompare"), updateButtonCtrl.ClientID);
        }
    }
}    

jQuery 确认对话框

如果您需要比常规 JavaScript 确认对话框更灵活的内容,您可以更改上述内容以使用jQuery UI 对话框作为确认。

于 2012-04-09T17:12:23.360 回答
0

如果您使用的是 WebForms (?),则需要向 GridView 模板添加一些验证控件。

这是MSDN中使用的示例CompareValidator

<EditItemTemplate>
    <asp:TextBox ID="EditUnitPrice" runat="server"
      Text='<%# Bind("UnitPrice", "{0:c}") %>'
      Columns="6"></asp:TextBox>
    <asp:CompareValidator ID="CompareValidator1" runat="server"
        ControlToValidate="EditUnitPrice"
        ErrorMessage="The price must be greater than or equal to zero and
                       cannot include the currency symbol"
        Operator="GreaterThanEqual" Type="Currency"
        ValueToCompare="0">*</asp:CompareValidator>
</EditItemTemplate>
于 2012-04-09T16:44:05.000 回答