【问题标题】:Execute Server Side from Client Side从客户端执行服务器端
【发布时间】:2011-06-02 17:22:06
【问题描述】:

我想从客户端执行添加按钮点击事件(服务器端)。

这是我的javascript函数

  function validateinput() {
    var arrTextBox = document.getElementsByTagName("input");
     var retVal = 1;
    for (i = 0; i < arrTextBox.length; i++) {
        if (arrTextBox[i].type == "text"  && arrTextBox[i].value == "") {
            retVal = 0;

        }
    }


    if (retVal == 0) {
        alert("Validation Failed");
        return false;
    }
    else {
        alert("Validation Success");
        return true;
        __doPostBack(btnAddItem);

    }

}

我仅在 alert("Validation Sucess") 并返回 true 时调用服务器端代码。

这是我的服务器端代码

    protected void Page_Load(object sender, EventArgs e)
    {
        txtbox1.Attributes.Add("onkeydown", "if(event.keyCode) {if  (event.keyCode > 57 && event.keyCode <= 90)  return false; } else {return true};");
        if (!IsPostBack)
        {
            //The code is too big to be posted
        }
    }

    protected void btnAddItem_Click(object sender, EventArgs e)
    {
        if (IsValidPost())
        {
            if (btnAddItem.Text == "Add Item +")
            {
                if (textbox1.text== "")
                {
                    Addtogrid();
                }
            }
        }
    }

我做对了吗?因为我没有得到预期的结果。我也在 Page.GetPostBackEventReference(btnAddItem);说 ClientScript 是一种推荐的方式。当我尝试使用 ClientScript.GetPostBackEventReference(btnAddItem);它会抛出一个错误,指出无法识别 ClientScript。

请帮忙

【问题讨论】:

    标签: javascript asp.net


    【解决方案1】:

    如果您使用验证控件对其进行设置,asp:button 对象的 onclick 事件将调用 client validation。如果您没有为按钮设置 onclick 事件,它将不知道要调用什么方法。如果您已设置 onclick,则不需要 javascript 调用。如果您设置验证控件以使用验证脚本,并且客户端验证 .net 将处理回发调用。查看您的脚本,使用required field validator 可能比您的自定义脚本更好。

    【讨论】:

    • 感谢您的回复。你能帮我得到想要的结果吗?
    • 必填字段验证器控件具有您想要内置的功能。您只需为您想要的每个文本框添加一个RequiredFieldValidator。如果这在页面加载时是动态的,您可以为每个添加一个并在页面加载/数据绑定事件中启用/禁用它们。默认情况下,Asp.net 按钮会导致验证。
    【解决方案2】:

    您确定在页面加载方法中需要 GetPostBackEventReference 代码吗? _doPostBack() 不是要引用的目标对象,只是名称。

    编辑:为什么在调用 _doPostBack() 之前调用 return true?

    编辑 2:有 2 种方法可以调用 GetPostBackEventReference,1) 从您的 .NET 代码 here 但这是一个过时的方法,建议使用客户端脚本版本,2) 从您的客户端脚本 here。我不知道您使用的是哪种方法,因为您没有发布页面加载代码。我看不出有理由根据您发布的其他代码来调用它。对 _doPostBack() 的调用无需获取控件的回发引用即可运行。

    删除对 GetPostBackEventReference 的调用并将您的 javascript 更改为如下所示:

    function validateinput() {
        var arrTextBox = document.getElementsByTagName("input");
        var ddlTextBox = document.getElementsByTagName("select");
        var retVal = 1;
        for (i = 0; i < arrTextBox.length; i++) {
            if (arrTextBox[i].type == "text" && arrTextBox[i].getAttribute("IsMandatory") == "Y" && arrTextBox[i].value == "") {
                retVal = 0;
            }
        }
    
        if (retVal == 0) {
            alert("Validation Failed");
            return false;
        }
        else {
            alert("Validation Success");
            __doPostBack('btnAddItem', '');
            return true; // This shouldn't be needed but it does need to come after _doPostBack()
        }
    }
    

    编辑 3:为按钮尝试以下代码:

    <asp:Button ID="btnAddItem" runat="server" onclick="btnAddItem_Click" OnClientClick ="javascript:validateinput(); return false;" Text="Add Item +" Width="85px" />
    

    如果您不希望 OnClientClick 代码回发到表单,则需要返回 false。即使您从调用的 JavaScript 方法返回 false,它仍然会回发。这对我来说从来没有意义,但我是通过反复遇到同样的问题才学会的。

    【讨论】:

    • @Chris,我很不明白你回答的第一行。如果可能的话,你能用代码帮我理解吗?
    • @Chris,我尝试了上面的代码并粘贴了我的页面加载方法,但如果验证失败,它不会显示警告框。
    • 你能发布你所有的代码吗?很难收集到你在用这些代码块做什么。
    • @jackey,它是显示成功消息还是在到达 if 块之前失败?什么调用 validateInput()?
    • 我正在使用它来调用 validateinput 即使验证失败,服务器端代码也会执行。如果验证成功,它会显示成功消息,但代码不会被执行...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多