Lorsque j'appelle un ScriptMethod à partir d'un bouton ASP.NET à l'aide de la propriété OnClientClick, le ScriptMethod renvoie 95% du temps (la zone d'alerte s'affiche) et la page soumet.Appel d'un ScriptMethod sur la soumission d'un formulaire?
Si j'appelle la méthode à partir d'un bouton d'entrée HTML, ScriptMethod renvoie 100% du temps, mais bien sûr, la page n'est pas soumise. Si je change le type à soumettre, je reviens aux 95% suivants.
Dois-je changer mon approche, et appeler de soumettre javascript après mes déclarations ScriptMethod, ou est-il un moyen de faire cela réussir 100% du temps? Par succès, je veux dire en fait renvoyer 100% du temps avant que le formulaire ne le soumette. Le ScriptMethod n'échoue jamais réellement.
Page:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ScriptServiceMadness._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="Chewbacca.asmx" />
</Services>
</asp:ScriptManager>
<div>
<asp:TextBox ID="VerifyPostbackTextBox" runat="server" Text="true" />
<asp:Button ID="SubmitFormButton" runat="server" OnClientClick="attack()" Text="Works 90%" OnClick="SubmitFormButton_Click" />
<input type="button" id="InputButton" value="Works 100%" onclick="attack()" />
</div>
</form>
<script type="text/javascript">
function attack()
{
ScriptServiceMadness.Chewbacca.ShootImperialProbeDroid(true, speak, youvefailedme);
}
function speak(result)
{
alert(result);
}
function youvefailedme(error)
{
alert(error);
}
</script>
</body>
</html>
code derrière:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
namespace ScriptServiceMadness
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void SubmitFormButton_Click(object sender, EventArgs e)
{
VerifyPostbackTextBox.Text = DateTime.Now.Ticks.ToString();
}
}
}
ScriptService:
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";
}
}
}
}
Une chose d'intérêt ... J'ai supprimé le paramètre bool du SciptMethod en écrivant ce question, et il semble fonctionner à 100% du temps. Cela peut bien sûr être une coïncidence.