Question

Je suis assez nouveau pour MVC si cela peut sembler une question évidente, mais lors de la publication à mon ActionResult, la ActionResult est appelée, mais la vue ne change pas.

Ce que je fais est d'avoir une page de recherche de base où un utilisateur peut rechercher ma base de données et les résultats sont renvoyés et paginé.

Voici le javascript qui appelle que ActionResult dans mon contrôleur.

    function SubmitSearch() {

    var searchBox = document.getElementById('searchBox');

    $.post("MyController/SearchResults/",
    {
        searchString: searchBox.value,
        page: 0
    });

    window.location = "../DriverStudio/Drivers/SearchResults/" + searchBox.value + '/0';
}

Ma solution actuelle (qui est un horrible hack) est de commenter le .post de $ (depuis mon itinéraire est mis en place d'une manière où le window.location appellera le SearchResutls ActionResult) et définir le window.location à ce l'utilisateur recherché, à partir de la page 0.

Il doit y avoir une meilleure façon. Que dois-je faire?

Était-ce utile?

La solution

Configurer votre action SearchResults pour retourner une vue partielle ne contenant que la partie de la page mise à jour lorsque la recherche est effectuée. Cette pièce doit être comprise dans un récipient, le rendant facile à remplacer. Ensuite, utilisez le mécanisme de rappel sur la méthode post pour remplacer le contenu de cette DIV avec le résultat vue partielle retour de votre action SearchResults. Return false de votre gestionnaire pour arrêter le défaut de soumettre l'action d'être prises.

function SubmitSearch() { 

    var searchBox = $('#searchBox'); 

    $.post("MyController/SearchResults/", 
    { 
        searchString: searchBox.val(), 
        page: 0 
    }, function(data) {
        $('#searchResults').html( data );
    }); 

    return false;
}

Cela suppose un code de vue qui ressemble à:

 <% using (Html.BeginForm()) { %
      <label for="searchBox">Search:</label>
      <%= Html.TextBox("searchBox") %>
 <% } %>
 <div id="searchResults">
 </div>

Autres conseils

Je ne suis pas familier avec de MVC, mais qu'est-ce que votre ActionResult faire autre que rediriger l'utilisateur vers l'URL que vous avez dans window.location?

Vous avez probablement besoin de mettre en œuvre un rappel, de jQuery docs :

 jQuery.post( url, data, callback, type )

Alors vous passez l'URL et les données, mais rien de ce que vous voulez faire avec les données renvoyées.

 $.post( "MyController/SearchResults/", 
         {searchString: searchBox.value,page: 0},
         function(result){
                //do something with what your actionresult returns here
                window.location = result.url;
         }
       );
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top