Asp.net 在表单提交时调用ScriptMethod?

Asp.net 在表单提交时调用ScriptMethod?,asp.net,ajax,asp.net-ajax,postback,Asp.net,Ajax,Asp.net Ajax,Postback,当我使用OnClientClick属性从ASP.NET按钮调用ScriptMethod时,ScriptMethod返回95%的时间(显示警报框),页面将提交 如果我从HTML输入按钮调用该方法,ScriptMethod会100%返回,但页面当然不会提交。如果我将类型更改为submit,我将返回到随后的95% 我是否必须改变我的方法,在我的ScriptMethod返回后从javascript调用submit,或者有没有办法让它100%成功?所谓成功,我指的是在表单提交前100%的时间返回。Scri

当我使用OnClientClick属性从ASP.NET按钮调用ScriptMethod时,ScriptMethod返回95%的时间(显示警报框),页面将提交

如果我从HTML输入按钮调用该方法,ScriptMethod会100%返回,但页面当然不会提交。如果我将类型更改为submit,我将返回到随后的95%

我是否必须改变我的方法,在我的ScriptMethod返回后从javascript调用submit,或者有没有办法让它100%成功?所谓成功,我指的是在表单提交前100%的时间返回。ScriptMethod实际上从未失败过

第页:

脚本服务:

using System;
using System.Data;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.ComponentModel;
using System.Web.Script.Services;
using System.Threading;

namespace ScriptServiceMadness
{
    /// <summary>
    /// Summary description for Chewbacca
    /// </summary>
    [ScriptService]
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(false)]
    public class Chewbacca : System.Web.Services.WebService
    {
        [ScriptMethod]
        [WebMethod]
        public string ShootImperialProbeDroid(bool letHanDoIt)
        {
            if (letHanDoIt)
            {
                return "rrrroooorrrr";
            }
            else
            {
                return "rrrraaaarrrr";
            }
        }
    }
}
使用系统;
使用系统数据;
使用System.Web;
使用系统集合;
使用System.Web.Services;
使用System.Web.Services.Protocols;
使用系统组件模型;
使用System.Web.Script.Services;
使用系统线程;
命名空间脚本服务疯狂
{
/// 
///丘巴卡概要说明
/// 
[脚本服务]
[WebService(命名空间=”http://tempuri.org/")]
[WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]
[ToolboxItem(假)]
公共类:System.Web.Services.WebService
{
[脚本方法]
[网络方法]
公共字符串射击ImperialProbedRoid(布尔勒坦迪特)
{
如果(LethandIt)
{
返回“rrroooorrr”;
}
其他的
{
返回“rrrraaarrr”;
}
}
}
}

有一件有趣的事……我在写这个问题时从SciptMethod中删除了bool参数,它似乎在100%的时间里都能工作。这当然可能是巧合。

因为脚本方法是异步执行的,所以不能保证它会在表单发回之前返回。当您在线部署并且您的用户与web服务的连接较慢时,更改不会增加。我建议您在收到回复后通过调用u doPostBack例程手动回发。

您忘记了:

using TheForce;

namespace Luke {
}
using System;
using System.Data;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.ComponentModel;
using System.Web.Script.Services;
using System.Threading;

namespace ScriptServiceMadness
{
    /// <summary>
    /// Summary description for Chewbacca
    /// </summary>
    [ScriptService]
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(false)]
    public class Chewbacca : System.Web.Services.WebService
    {
        [ScriptMethod]
        [WebMethod]
        public string ShootImperialProbeDroid(bool letHanDoIt)
        {
            if (letHanDoIt)
            {
                return "rrrroooorrrr";
            }
            else
            {
                return "rrrraaaarrrr";
            }
        }
    }
}
using TheForce;

namespace Luke {
}