2

我在客户端设置 customvalidator 时遇到问题。基于特定的隐藏字段值,按钮的 onClientClick 事件应该触发一个函数,该函数将 CustomValidator 的 isValid 属性设置为 false。

下面是一些代码: 后面的代码:

protected void Page_Load(object sender, EventArgs e)
{
    if (hiddenfieldValue == true)
    {
        btnSend.OnClick = "someJavascriptFunction()";
    }
}

ASPX 文件:

function someJavascriptFunction()
{
    if (hiddenfieldValue == true)
      // Show Validation and dont do postback
      vldValdiator.isValid = false; 
      return false;   //Dont do Postback
    else
      return true; Do Postback
}

<asp:CustomValidator ID="vldValidator" runat="server" Text = "ABC"/>

我无法在基于客户端的隐藏字段值上设置 isValid 属性。请帮忙 。提前致谢。

4

2 回答 2

3

方法一

您可以尝试Page_IsValid在按钮 onClientClick 事件中将属性设置为 false。就 asp.net 验证器而言,这将强制页面进入非验证状态。

基本示例

function ButtonOnClickClient()
{
   if ($('#hiddenFieldID').val() == 'someValue')
   {
      Page_IsValid = false;
   }
}

老实说 - 我不相信 Page_IsValid 属性不会被重置。你需要尝试

方法二

您可以让 customvalidator 客户端验证检查隐藏字段,并在此基础上使验证器通过或失败验证。然后,客户端单击事件上的按钮可以调用Page_ClientValidate()将在页面上强制验证的函数。这将设置正确的验证属性。

基本示例 2

function CustomValidatorClientValidate(source, arguments)
   {
        if ($('#hiddenFieldID').val() == 'someValue'){
            arguments.IsValid = true;
        } else {
            arguments.IsValid = false;
        }
   }

function ButtonOnClientClick()
{
    Page_ClientValidate();
}

这使用 JQuery - 因为我发现以这种方式编写示例更容易。绝不是强制使用它。另外我假设存在 asp.net 验证器 API。如果您已包含这些控件,则应该是这样,但您始终可以通过添加对函数名称的检查来收紧

如果您正在使用验证组,您可能会调用将变为

Page_ClientValidate(validationGroupName);

方法三

您可以尝试一下,但设置 customvalidator 的 isvalid 属性。这应该让您更直接地控制您想要的验证器。下面的参考说

isvalid 布尔属性。这是每个客户端验证器上的一个属性,指示它当前是否有效

我做了类似于前两个的事情,但我没有亲自尝试过这个。

一般来说

您使用的一般方法是直接操作 asp.net 验证器使用的 javascript API。它不是很漂亮,但你可以得到你想要的控制

参考

这提供了对您尝试使用的 javascript API 的引用。这是一篇很长的文章,但您想要的内容大约是一半

http://msdn.microsoft.com/en-us/library/Aa479045

祝你好运

更多的

我真的需要离开这个,但你的代码在这里是错误的——它是 OnClientClick。

 btnSend.OnClientClick = "someJavascriptFunction()";
于 2013-06-22T14:11:25.270 回答
0

使用它来绑定事件。

btnSend.Attributes.Add("onclick","return someJavascriptFunction();")

于 2013-06-22T14:17:27.483 回答