我正在尝试通过 javascript 函数进行客户端验证。我有一个 ASP.NET c# 页面,它成功调用了一个 WebMethod(从后面的页面代码)来验证用户可以访问输入的数据。我有一个带有 AJAX AutoCompleteExtender 的文本框,它工作正常。我有我正在尝试调用 javascript 函数来验证数据的 CustomValidator。Web 方法(从 SQL 数据库中提取)正在按预期执行并返回数据。Javascript 正在执行 web 方法。问题是 PageMethods 正在使用“OnSuccess”函数(来自被调用的 javascript 函数的嵌套函数)但是从 OnScuess 函数我无法设置 args.IsValid = true/false。我可以在原始函数中设置此属性,但为了做到这一点,我需要两个 args。OnSuccess 的值和结果,以评估它是否有效。两者都无法相互访问。我尝试过隐藏字段来设置要评估的值,我尝试过 JavaScript 中的“全局”变量。似乎没有什么能给我想要的结果。在评估设置 args.IsValid 之前,隐藏字段和“全局”变量都没有设置。有人可以帮忙吗。我无法相信如此简单的任务变得如此困难。显示验证错误消息的唯一方法是,如果我手动设置 args.IsValid 并在 javascript 主函数的底部发出警报(“与我在此处输入的内容无关”)。我不想要警报,我只想在我的文本框旁边显示一条消息。
我知道一个简单的解决方案是有一个下拉列表,但也有服务器端验证,但这不是我需要的。
这是我的javascript函数
function pmValidateGLAccount(oSrc, args) {
var GLIsValid;
PageMethods.ValidateGLAccountAccess(args.Value, OnSuccess);
function OnSuccess(result) {
// I NEED TO DETERMINE IF IS VALID BUT SET THE args.IsValid after the process leaves this nested function
if (args.Value != result) {
GLIsValid = false;
}
else {
GLIsValid = true;
};
};// THIS IS THE END OF THE ONSUCCESS FUNCTION
//args.IsValid = false; //THIS IS WHERE WE NEED TO SET THE IsValid
} // THIS IS THE END OF THE pmValidateGLAccount FUNCTION
这是我的 CustomValidator
<asp:CustomValidator ID="CustomValidator1"
runat="server"
ControlToValidate="TextBox1"
ValidationGroup="vg_test"
ClientValidationFunction="pmValidateGLAccount"
ErrorMessage="Error: Please Enter an Account Number from the list"
Display="Dynamic"></asp:CustomValidator>
这是我的网络方法
[System.Web.Services.WebMethod(), System.Web.Script.Services.ScriptMethod()]
public static string ValidateGLAccountAccess(string GLAccountNum)
{
string RetValue = string.Empty;
string CurUser = HttpContext.Current.User.Identity.Name.ToString();
string CurUserRemoveDomain = string.Empty;
int i = CurUser.IndexOf("\\");
if (i != -1)
{
CurUserRemoveDomain = CurUser.ToLower().Replace(Resources.AppSettings.ActiveDirectoryDomain.ToString().ToLower() + "\\", "");
CurUser = CurUserRemoveDomain;
}
using (SqlConnection conn = new SqlConnection())
{
conn.ConnectionString = ConfigurationManager.ConnectionStrings["CustDBConn"].ConnectionString;
using (SqlCommand cmd = new SqlCommand("MySproc", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@SearchString", GLAccountNum);
cmd.Parameters.AddWithValue("@UserName", CurUser);
cmd.Connection = conn;
conn.Open();
RetValue = (string)cmd.ExecuteScalar();
conn.Close();
}
}
return RetValue;
}