繁体   English   中英

从客户端执行服务器端

[英]Execute Server Side from Client Side

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

这是我的 javascript function

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

    }

}

我仅在警报(“验证成功”)并返回 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。

请帮忙

如果您使用验证控件设置它,asp:button object 的 onclick 事件将调用客户端验证 如果您还没有为按钮设置 onclick 事件,它将不知道调用什么方法。 如果您已设置 onclick,则不需要 javascript 调用。 如果您设置验证控件以使用验证脚本和客户端验证 .net 将处理回发调用。 查看您的脚本,使用必填字段验证器可能比您的自定义脚本更好。

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

编辑:为什么在调用 _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,它仍然会回发。 这对我来说从来没有意义,但我通过反复遇到同样的问题而学会了这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM