2010-10-05 17 views
1

J'ai écrit une page Méthode de page dans ma page aspx. Dans la méthode de service Web, je dois appeler la zone de texte de retour de la méthode FindControl et obtenir la valeur de la zone de texte. Mais mon findControl prendra l'objet MasterPage pour itérer.Comment passer la page ou l'objet de page maître à la méthode de page AJAX

S'il vous plaît voir mon code

<script type = "text/javascript"> 
    function ShowCurrentDateTime() { 
     $.ajax({ 
      type: "POST", 
      url: "HRDefault.aspx/GetDate", 
      data: '', 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: OnSuccess, 
      failure: function(response) { 
       alert(response.d); 
      } 
     }); 
    } 

    function OnSuccess(response) { } 
</script> 

<System.Web.Services.WebMethod()> _ 
Public Shared Function GetDate() As String 
    Dim txt22_2 As TextBox = CType(RenderControls.FindControlRecursive 
(Page.Master, "txt22_2"), TextBox) 
     Dim str As String 
     str = txt22_2.Text 
    Return String.Empty 
End Function 

Mais j'obtiens l'erreur du compilateur lorsque l'utilisation Page.Master:

Référence à un membre non partagé nécessite une référence d'objet

Comment passer Objet de la page maître ou méthode Page à la page? Donc, je peux utiliser dans la méthode Sared.

Est-il possible d'accéder directement à la valeur Textbox dans la méthode Page? J'ai besoin d'accéder à quelques contrôles dans la méthode de la page.

Répondre

1

ne savent pas $.ajax, mais cela fonctionne très bien pour moi:

<asp:ScriptManager runat="server" EnablePageMethods="true" /> 
<!-- ...................... --> 
<script type="text/javascript"> 
    function ShowCurrentDateTime() { 
     x = document.getElementById('<%= TextBox1.ClientID %>').value; 
     PageMethods.GetDate(x, OnSuccess, OnFailure); 
    } 
    function OnSuccess(response) { 
     alert(response); 
    } 
    function OnFailure(response) { 
     alert(response._message); 
    } 
</script> 

et code derrière:

<System.Web.Services.WebMethod()> _ 
Public Shared Function GetDate(x as String) As String 
    ' do something with x 
    ' u can add more params if you need 
    Return String.Empty 
End Function 

espèrent la syntaxe est ok, je ne me souviens pas beaucoup de vb: P

1

HttpContext.Current.Handler peut vous donner la référence à l'objet page mais cela ne sera pas utile car le cycle de vie de la page n'est pas exécuté dans PageMethods (donc pas d'état d'affichage ni de données de requête). Vous avez deux alternatives:

  1. Sélectionnez les valeurs de contrôle à partir de Java-script. Si nécessaire, transmettez-les à PageMethod en utilisant le paramètre de données lors de l'appel de service.
  2. Utilisez Session (HttpContext.Current.Session) ou le cache pour stocker des données sur la page, puis récupérez-le dans PageMethod. Je vais préférer utiliser le cache avec un nouveau guid comme clé, puis passer guid à PageMethod.
0

Puisque vous publiez déjà des données, vous devriez être en mesure d'obtenir une référence à la collection Request.Form que vous pouvez utiliser pour lire pos valeurs de la zone de texte té