我正在使用WebForms GridView控件。当用户单击某行上的“更新”时,我想检查他们输入的值与其他一些记录。
由此,如果我返回true,我想显示一个确认对话框,询问用户是否要继续更新。
javascript确认对话框可能无法正常工作,因为只有当输入的值符合特定条件时,我并不总是希望显示此对话框。
有什么建议吗?
答案 0 :(得分: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
类的代码(link):
<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
的{{1}}事件中,为每行分配GridView
函数:
onchange
jQuery确认对话
如果您需要比常规JavaScript确认对话框更灵活的内容,则可以更改上述内容以使用jQuery UI Dialog作为确认。
答案 1 :(得分:0)
如果您使用的是WebForms(?),则需要向GridView模板添加一些验证控件。
以下是example from 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>