J'essaie de créer une publication asynchrone dans ASP.NET en utilisant __doPostBack()
, mais je ne sais pas comment le faire. Je veux utiliser JavaScript vanille.
Quelque chose de simple, comme un clic sur un bouton, peut provoquer le déclenchement de l'événement __doPostBack()
. J'essaie juste d'apprendre comment fonctionne le mécanisme.
Vous pouvez essayer ceci dans votre formulaire Web avec un bouton appelé btnSave, par exemple:
<input type="button" id="btnSave" onclick="javascript:SaveWithParameter('Hello Michael')" value="click me"/>
<script type="text/javascript">
function SaveWithParameter(parameter)
{
__doPostBack('btnSave', parameter)
}
</script>
Et dans votre code, ajoutez quelque chose comme ceci pour lire la valeur et l'exploiter:
public void Page_Load(object sender, EventArgs e)
{
string parameter = Request["__EVENTARGUMENT"]; // parameter
// Request["__EVENTTARGET"]; // btnSave
}
Essayez-le et dites-nous si cela a fonctionné pour vous.
C’est également un bon moyen d’afficher des contrôles côté serveur dans la publication FancyBox et/ou jQuery Dialog. Par exemple, dans FancyBox-div:
<asp:Button OnClientClick="testMe('param1');" ClientIDMode="Static" ID="MyButton" runat="server" Text="Ok" >
</asp:Button>
JavaScript:
function testMe(params) {
var btnID= '<%=MyButton.ClientID %>';
__doPostBack(btnID, params);
}
Page_Load côté serveur:
string parameter = Request["__EVENTARGUMENT"];
if (parameter == "param1")
MyButton_Click(sender, e);
Voici un bref tutoriel sur le fonctionnement de __doPostBack()
.
Pour être honnête, je ne l'utilise pas beaucoup; au moins directement. De nombreux contrôles de serveur (par exemple, Button
, LinkButton
, ImageButton
, des parties de GridView
, etc.) utilisent __doPostBack
comme mécanisme de postback.
Je voudrais juste ajouter quelque chose à ce post pour asp:button
. J'ai essayé clientId et cela ne semble pas fonctionner pour moi:
__doPostBack('<%= btn.ClientID%>', '');
Cependant, obtenir UniqueId semble publier sur le serveur, comme ci-dessous:
__doPostBack('<%= btn.UniqueID%>', '');
Cela pourrait aider quelqu'un d'autre à l'avenir, et donc poster ceci.
Ancienne question, mais j'aimerais ajouter quelque chose: lorsque vous appelez doPostBack()
, vous pouvez utiliser la méthode du gestionnaire de serveur pour l'action.
À titre d'exemple:
__doPostBack('<%= btn.UniqueID%>', 'my args');
Va tirer, sur le serveur:
protected void btn_Click(object sender, EventArgs e)
Je n'ai pas trouvé de meilleur moyen pour obtenir l'argument, donc j'utilise toujours Request["__EVENTARGUMENT"]
.
Comme d'autres l'ont déjà dit, vous devez fournir l'ID unique du contrôle à la méthode __doPostback ().
__doPostBack('<%= btn.UniqueID %>', '');
Sur le serveur, les valeurs de formulaire soumises sont identifiées par l'attribut name des champs de la page.
La raison pour laquelle UniqueID fonctionne parce que UniqueID et name sont en fait la même chose quand le contrôle serveur est rendu en HTML.
Voici un article qui décrit ce qu'est l'ID unique:
La propriété UniqueID est également utilisée pour fournir une valeur à l'attribut HTML "name" des champs de saisie (cases à cocher, listes déroulantes et champs masqués). UniqueID joue également un rôle majeur dans les publications. La propriété UniqueID d'un contrôle serveur, qui prend en charge les publications, fournit des données pour le champ masqué __EVENTTARGET. ASP.NET Runtime utilise ensuite le champ __EVENTTARGET pour rechercher le contrôle qui a déclenché la publication, puis appelle sa méthode RaisePostBackEvent.
src: https://www.telerik.com/blogs/the-difference-between-id-clientid-and-uniqueid
Voici comment je le fais
public void B_ODOC_OnClick(Object sender, EventArgs e)
{
string script="<script>__doPostBack(\'fileView$ctl01$OTHDOC\',\'{\"EventArgument\":\"OpenModal\",\"EncryptedData\":null}\');</script>";
Page.ClientScript.RegisterStartupScript(this.GetType(),"JsOtherDocuments",script);
}