2017-07-24 4 views
0

J'ai regardé tellement de commentaires sur ce sujet, et j'ai essayé un certain nombre de méthodes suggérées pour accomplir ceci mais je ne suis toujours pas capable d'accéder au code derrière. Le message d'erreur revient avec la routine de succès. J'utilise un Select2 comme source d'entrée (il n'y a pas de liste, seulement ce que l'opérateur désire entrer) pour que plusieurs entrées soient passées via ajax à mon code derrière. Je crois que le type de données peut ne pas être le même que le code derrière, mais je ne sais pas comment le définir autrement que ce que j'ai, ou a-t-il été déprécié et je ne suis pas au courant. Je suis passé à la programmation d'origine lorsque l'erreur s'est produite. myData est changé en modèle pour faire correspondre le code derrière. Voici ce que je reçois dans le select2 si je mets "test" et "copier".Passer la chaîne d'AJAX au code C# derrière

Après la valeur du modèle est: test, copie

Voici mon code côté client:

... 
<select id="SearchSelect" style="width: 150px" name="SearchSelct" 
multiple onmouseover="SearchTip('#SrchToolTip','#hdnviewsrch');return 
false;"></select> 
    <textarea id="SrchToolTip" style="color:blue" hidden="hidden">You can 
enter any keyword you like.</textarea> 
    <br /> 
    <br /> 
<asp:Button ID="SearchFnd" runat="server" Text="Submit" 
OnClientClick="SearchSel('#SearchSelect');return false;" 
ValidateRequestMode="Disabled" UseSubmitBehavior="False"/> 

<script type="text/javascript"> 
    $(document).ready(function() { 
    //On client side - Here we render the Select 2 
    $("#SearchSelect").select2(
    { 
     placeholder: "Enter Search Parameters", 
     tags: true, 
     tokenSeparators: [','], 
     allowClear: true, 
     minimumInputLength: 1, 
     width: 'resolve', 
     }); 
    }); 
    $("#SearchSelect").on("change", function (e) { 
SearchChange("SearchSelect"); }); 

    function SearchTip(SrchElem) { 
     $(SrchElem).show(); 
     console.log("Search Tip value is: " + $("#SearchSelect").val()); 
     }; 

    function SearchChange(name, evt) { 
     console.log("Search Change value is: " + $("#SearchSelect").val() 
+ "; Name: " + name); 
    }; 
    function SearchSel(SchElem) { 
     var model= { "SrchData": $(SchElem).val() }; 
     $.ajax(
     { 
      type: "POST",  
      url: '<%= ResolveUrl("~/Default.aspx/SearchFind") %>', 
      data: JSON.stringify(model.SrchData), 
      dataType: 'json', 
      contentType: "application/json; charset=utf-8", 
      success: function (result) { 
       alert('success'); 
       console.log("Search data obtained: " + result); 
      }, 

      error: function (jqXHR, textStatus, errorThrown) { 
       alert("error: " + errorThrown); 
      }, 
      failure: function() { 
      alert('Failure'); 
      } 
      processResults: function (data, params) { 
       console.log("Search data obtained: " + data); 
       return { 
        results: data.d, 
        pagination: { 
         more: data.more 
        } 

       }; 
      } 
     }); 
    } 
    </script> 

Voici le code derrière:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.Services; 
using System.Web.Script.Services; 

namespace WebApplication2 
{ 
    public partial class _Default : Page 
    { 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
    public class Schdata 
    { 
     public string SrchData { get; set; } 
    } 

    [WebMethod()] 
    // [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public static string SearchFind(Schdata model) 
    { 
     System.Diagnostics.Debug.WriteLine("Went into the SearchFind 
     subroutine " + model.SrchData); 
     return "1"; 
     } 

    } 
} 

Voici la message d'erreur:

succès! { "Message": "L'authentification a échoué.", "StackTrace": null, "ExceptionType": "System.InvalidOperationException"}

Le programme dit qu'il est réussi, mais donne une erreur que la valeur est nulle d'être renvoyée (ou envoyé) mais sur le code derrière j'ai un point d'arrêt à la ligne System.Diagnostics.Debug.WriteLine ... et il n'atteint jamais là. Toute aide serait appréciée.

+0

Avez-vous essayé la visite <% = ResolveUrl ("~/Default.aspx/SearchFind ")%> pour s'assurer qu'il est accessible par le client? A défaut, pouvez-vous vous assurer que les données attendues sont affichées? – atoms

+0

Ceci est fonctionnel. Je l'ai utilisé dans beaucoup d'autres pages. Le seul moyen que je connaisse est de l'écrire sur la console avant de l'envoyer via Ajax. De plus, j'ai répondu à la question avant que j'aille à Ajax mais cela n'a rien changé. Merci. – Rick

+0

Voir si ma réponse dans le lien ci-dessous aiderait: https://stackoverflow.com/questions/40957556/passing-data-from-view-to-partial-in-net-core/44831001#44831001 –

Répondre

0

Dans votre code derrière

public partial class _Default : Page 
{ 
    string myStrCb = "Value from back"; 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    //... any code 
    } 
    // ...more code 
} 

Dans votre code avant

<script> 
    var myJsVar = <%=myStrCb %> 
</script> 

Utilisation dans le script

function WriteValue() 
{ 
    console.log(myJsVar); // Value from back 
} 
+0

Merci d'avoir pris le temps mais ce n'est pas mon problème. Je peux obtenir toutes les données que je veux à partir du back-end, c'est obtenir des valeurs d'Ajax à l'extrémité arrière qui est le problème. Je reçois un succès d'AJAX mais il ne va pas à la sous-routine du côté serveur et me donne un message d'erreur de valeur nulle. – Rick