从代码隐藏调用JavaScript并在代码隐藏中调用脚本调用函数(PageMethods是不可见的)

时间:2017-01-24 11:29:49

标签: javascript c# html asp.net

我需要从代码隐藏中调用确认消息框,因为用户从dropdown列表中选择数据,并且当所选数据为1时,例如,将向用户显示确认框以确认其操作 所以我在下面的代码中做了这个,我调用了这个JavaScript方法:

if (dropdownlist1.SelectedValue == 1)
{
    ScriptManager.RegisterStartupScript(this, this.GetType(), "CallConfirmBox", "CallConfirmBox();", true);
}

脚本功能:

<script type="text/javascript">
function CallConfirmBox() {
    if (confirm("هل تريد ان تفصل الباليت؟")) {
                   alert("سيتم فصل الباليت!");
        PageMethods.getdata(onSuccess, onError); 
        function onSuccess() {
            alert(data);
        }

        function onError() {
            alert(errorMessage);
        }            
         }
    } else {
        //CANCEL – Do your stuff or call any callback method here..
        alert("done!");
    }
}

我在HTML代码的开头添加了以下行:

    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"> </asp:ScriptManager>

以下是从脚本调用的函数背后的代码:

    [System.Web.Services.WebMethod()]
    [System.Web.Script.Services.ScriptMethod()]
    public static void getdata()
    {

        int nRowsCheck = cMDP.Update_Segregation_PalletPart(nPalletNo);
        if (nRowsCheck != 0)
        {
            nRowsCheck = 0;
            nRowsCheck = cMDP.Update_Segregation_Pallet(nPalletNo, nUserID);
            if (nRowsCheck != 0)
            {
                nRowsCheck = 0;

                nRowsCheck = cMDP.Delete_Segregation_PalletPart_Delete(nPalletNo);
                if (nRowsCheck != 0)
                {
                    nRowsCheck = 0;
                    nRowsCheck = cMDP.Delete_Segregation_Pallet_Delete(nPalletNo);
                }
            }
        }
}

但是我得到了以下错误:

  

运行脚本时页面方法未定义!!

请提供帮助,因为我需要一些支持

2 个答案:

答案 0 :(得分:0)

你有两个问题:

  1. 更改您的javascript代码:

        PageMethods.getdata(onSuccess, onError);
    
        function onSuccess(data)
        {
            alert(data);
        }
    
        function onError(data)
        {
            alert(data);
        }
    
  2. 你在getdata方法后面的代码必须是公共静态字符串函数:

    [System.Web.Services.WebMethod()]
    [System.Web.Script.Services.ScriptMethod()]
    public static string  getdata()
        {
            //Do some things
            return " Operations done successfully!";            
        }
    

答案 1 :(得分:0)

首先,您必须在JavaScript中的}之前删除一个else

改变您的代码隐藏:

if (dropdownlist1.SelectedValue == "1")

主要问题:Page Methods is undefined

您的评论似乎表明您正在使用用户控件(ascx)。 页面方法无法在用户控件中使用。请参考以下问题:

最简单的解决方案是使用aspx WebForm而不是ascx用户控件。这就是我测试和工作过的。

或者您可以使用WebService,如以下问题中所述:

但样本的链接不再有效。

或者您可以尝试使用此项目尝试将ASP.NET AJAX页面方法引入UserControls: