我不确定如何在javascript中实现以下功能,或者即使我正确地考虑它。基本上我想将javascript成员函数附加到每个呈现的自定义对象,所以我可以在C#中使用这样的东西:
public class NumericTextBox : TextBox
{
...
string clientScript = "function isValid() { return isNumericValue(this.value); }";
AttachValidationFunction(clientScript);
}
public class EmailTextBox : TextBox
{
...
string clientScript = "function isValid() { return isEmail(this.value); }";
AttachValidationFunction(clientScript);
}
然后在页面中使用以下javascript函数
function isFormValid() {
var controls = getElementsByClass("validatingControl");
...
if (!controls[i].isValid()) return false;
...
}
显然是伪代码,但希望能给出我需要实现的目标。有什么建议吗?
答案 0 :(得分:1)
我要做的是确保AttachValidationFunction接收this.ClientID
以及验证函数,添加到列表(例如,Dictionary<String, String>
),并在渲染时,注册一个javascript块与所有添加的控件的数组,其结果如下所示:
<script type="text/javascript">
var controlsToValidate = [
{ id: 'ctl00_txtNumeric', validate: function(e) { return isNumeric(e.value); } },
{ id: 'ctl00_txtEmail', validate: function(e) { return isEmail(e.value); } }
];
</script>
然后你可以像这样遍历那个数组:
<script type="text/javascript">
function isFormValid() {
for(var i = 0; i < controlsToValidate.length; i++) {
var control = controlsToValidate[i];
var field = document.getElementById(control.id);
if(!control.validate(field))
return false;
}
return true;
}
</script>
我希望这很清楚。