2010-09-20 11 views
1

Ce que je voudrais faire, c'est que l'utilisateur ajoute un nouvel enregistrement à la base de données et ouvre une boîte de dialogue JQuery confirmant que le nouvel enregistrement a été sauvegardé. Je pensais que ce serait un exercice simple. J'ai un gridview lié à un LINQDataSource pour permettre à l'utilisateur de voir et éditer des enregistrements existants et une zone de texte et un bouton pour ajouter de nouveaux codes.Afficher la boîte de dialogue jquery en postback dans ASP.NET après avoir enregistré un nouvel enregistrement

Dans la tête du document, je donne les résultats suivants:

$('#dialog').dialog({ 
    autoOpen: false, 
    width: 400, 
    buttons: { 
     "Ok": function() { 
      $(this).dialog("close"); 
     } 
    } 
}); 

et futher dans le balisage je:

<div id="dialog" title="New Code Added"> 
<p>"<asp:Literal runat="server" ID="LiteralNewCode"></asp:Literal>" was successfully added.</p> 
</div> 

Ainsi, lorsque l'utilisateur entre dans une nouvelle description et il passe toute la validation, il est ajouté à la base de données et le gridview est rebondi pour afficher le nouvel enregistrement.

protected void ButtonSave_Click(object sender, EventArgs e) 
{ 
    if (Page.IsValid) 
    { 
     CCRCode.Add(<long list of paramters>); 
     GridCode.DataBind(); 

     IsNewCode = true; 
     NewDescription = <new description saved to database>; 
    } 
} 

Maintenant, voici où (je pensais) je définir une propriété booléenne pour indiquer qu'une nouvelle description a été ajoutée, ainsi que le texte de la nouvelle description. Voir ci-dessous:

protected bool IsNewCode 
{ 
    get { return ViewState["IsNewCode"] != null ? (bool)ViewState["IsNewCode"] : false; } 
    set { ViewState["IsNewCode"] = value; } 
} 

private string NewDescription 
{ 
    get { return ViewState["NewDescription"] != null ? ViewState["NewDescription"].ToString() : string.Empty; } 
    set { ViewState["NewDescription"] = value; } 
} 

Voici où je perds mon chemin. Je suppose que je veux ajouter des fonctionnalités à inclure un code similaire à:

$('#dialog').dialog('open'); 

J'ai ajouté une méthode de registerscriptblock en cas page_load mais cela ne fonctionne pas. Des idées? Ou est-ce que je vais tout à fait faux?

Merci.

Répondre

2

Pas vraiment ce que vous voulez faire. Mais, j'utilise jquery alot avec .NET dans mes projets. Voici comment je le fais, je pourrais probablement vous donner un indice.

foo.aspx.cs

public String ScriptToRun = "$('#dialog').dialog('open');"; 

changer la valeur de ScriptToRun dans votre code C#

foo.aspx

$(document).ready(function() {<%=ScriptToRun %>}); 

Rappelez-vous que tout ce que vous fait en arrière-plan va générer HTML, Css & javascript au navigateur.

2

Deux façons: une, écrire le javascript dans votre code côté serveur. Ou, définir une méthode JS pour afficher la boîte de dialogue (par exemple le nom showDialog), et l'appeler via:

Page.ClientScript.RegisterStartupScript(... "showDialog();" ..); 

RegisterStartupScript met l'appel de méthode à la fin, assurez-vous que votre script est au-dessus de travailler. Vous pouvez également l'entourer d'un appel document.ready pour vous assurer que JQuery est correctement chargé.

0

Je pense que la seule chose qui vous manque est la création du dialogue lorsque le Dom est prêt.

$(document).ready(function() {$('#dialog').dialog('open');}); 
0

J'ai posté code dans une autre question pour une coutume « MessageBox » classe I écrit: ASP.NET Jquery C# MessageBox.Show dialog uh...issue

le code par défaut utilise la fonction d'alerte javascript(), mais vous pouvez définir votre rappel de telle sorte que il appelle votre méthode javascript personnalisée pour afficher les messages.