从客户端执行服务器端

时间:2011-06-02 17:22:06

标签: javascript asp.net

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

这是我的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);

    }

}

我仅在警报(“验证成功”)时调用服务器端代码并​​返回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。

请帮忙

2 个答案:

答案 0 :(得分:0)

如果使用验证控件进行设置,则asp:button对象的onclick事件将调用client validation。如果您尚未将onclick事件设置为按钮,则无法知道要调用的方法。如果您已设置onclick,则不需要javascript调用。如果您设置验证控件以使用验证脚本和客户端验证.net将处理回发调用。在查看脚本时,使用required field validator比使用自定义脚本更好。

答案 1 :(得分:0)

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

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

编辑2:有两种方法可以从.NET代码here调用GetPostBackEventReference,1)但这是一种过时的方法,建议使用客户端脚本版本,2)来自客户端脚本{{ 3}}。我无法分辨您使用的是哪种方法,因为您没有发布页面加载代码。我没有理由根据您发布的其他代码来调用它。对_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,它仍然会回发。这对我来说从来没有意义,但我通过反复讨论这个问题来学习它。

相关问题