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

ページレベルで隠し変数を使用し、サーバー側から値を設定してクライアント側で検証することができます。

 <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 に答える