客户端自定义验证器中的服务器端变量
本文关键字:服务器端 变量 自定义 验证 客户端 | 更新日期: 2023-09-27 18:12:31
我在页面上有一个自定义验证器:
<asp:CustomValidator ID="CustomValidator2" runat="server"
ControlToValidate="ddlProposer" ErrorMessage="Please select some values."
Display="Dynamic" onservervalidate="CustomValidator2_ServerValidate"
ClientValidationFunction="CustomValidator2_ClientValidate">
</asp:CustomValidator>
它必须是有效的,当一个服务器端列表不是空的(或者:ListCount
变量> 0),这个列表可能会在页面加载后改变(通过更新面板上的按钮):
public partial class Pages_Application_Application : System.Web.UI.Page
{
protected List<IdValue> ProposersList
{
get
{
if (ViewState["proposersList"] == null)
ViewState["proposersList"] = new List<IdValue>();
return ViewState["proposersList"] as List<IdValue>;
}
set
{
ViewState["proposersList"] = value;
}
}
public int ListCount
{
get
{
return this.ProposersList.Count;
}
}
...
服务器端验证没有问题:
protected void CustomValidator2_ServerValidate(object source, ServerValidateEventArgs args)
{
args.IsValid = this.ProposersList.Count > 0;
}
问题出在客户端。我一直在尝试这样做:
<script type="text/javascript">
function CustomValidator2_ClientValidate(source, arguments) {
var serverVariable = <%= ListCount %>;
alert(serverVariable);
arguments.IsValid = serverVariable > 0;
}
</script>
但是,仅在第一次页面加载时触发,并且ListCount变量始终为0 (serverVariable也是如此)。
问题是:有没有一种简单的方法使它工作?所以Javascript获得了一些服务器端变量的当前值?
您可以在页面级别使用隐藏变量,并通过在服务器端设置其值并在客户端验证。
<input type="hidden" id="ListCount" runat="server" value="0" />
public partial class Pages_Application_Application : System.Web.UI.Page
{
protected List<IdValue> ProposersList
{
get
{
if (ViewState["proposersList"] == null)
ViewState["proposersList"] = new List<IdValue>();
return ViewState["proposersList"] as List<IdValue>;
}
set
{
ViewState["proposersList"] = value;
ListCount=value;
}
}
public int ListCount
{
get
{
return this.ProposersList.Count;
}
}
<script type="text/javascript">
function CustomValidator2_ClientValidate(source, arguments) {
var count= document.getElementById("ListCount").value;
alert(count);
arguments.IsValid = count > 0;
}
您将不得不在纯javascript中完成,并且没有获得服务器端变量的感觉,因为它在客户机验证完成时不会是最新的。
你需要的是传递你的ddl html元素到你的CustomValidator2_ClientValidate
函数,并检查它是否包含option
html元素,这应该做的伎俩。