0

我在页面上有一个自定义验证器:

<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获取一些服务器端变量的当前值?

4

2 回答 2

1

您必须使用纯 javascript 进行操作,并且没有获取服务器端变量的意义,因为在客户端验证完成时它不会是最新的。

您需要的是将您的 ddl html 元素传递给您的CustomValidator2_ClientValidate函数并检查它是否包含optionhtml 元素,这应该可以解决问题。

于 2013-05-07T13:46:31.240 回答
1

您可以在页面级别使用隐藏变量,并从服务器端设置其值并在客户端验证。

 <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;
}

于 2013-05-07T14:58:01.457 回答