2009-10-07 8 views
3

Je n'arrive pas à obtenir ma vue partielle à afficher dans ASP.Net MVC 1.0 lorsque je le charge avec JQuery.Chargement de la vue partielle à partir de JQuery ne s'affiche pas dans MVC

j'ai un contrôleur comme:

public ActionResult Index() { 
     return View(_invoiceService.FindAllInvoices()); 
    } 

    public ActionResult InvoiceSearchResults() { 
     return PartialView("InvoiceSearchResults",_invoiceService.FindAllInvoices()); 
    } 

J'ai un Voir Index:

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
    Index 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
<%= Html.Script("/scripts/InvoiceSearch.js") %> 

<h2>Search</h2> 
<div class="SearchBar"> 
</div> 

<div class="SearchResults"></div> 

<p><%= Html.ActionLink("Create New", "Create") %></p> 
</asp:Content> 

J'ai alors PartialView:

<table> 
    <tr> 
     <th></th> 
     <th>InvoiceId</th> 
     <th>InvoiceNo</th> 
     <th>SupplierId</th> 
     <th>InvoiceDate</th> 
     <th>TotalValue</th> 
     <th>InputDate</th> 
     <th>PaymentDueDate</th> 
     <th>InvoiceStatusId</th> 
     <th>AuthoriserId</th> 
    </tr> 

<% foreach (var item in Model) { %> 
    <tr> 
     <td> 
      <%= Html.ActionLink("Edit", "Edit", new { id=item.InvoiceId }) %> | 
      <%= Html.ActionLink("Details", "Details", new { id=item.InvoiceId })%> 
     </td> 
     <td><%= Html.Encode(item.InvoiceId) %></td> 
     <td><%= Html.Encode(item.InvoiceNo) %></td> 
     <td><%= Html.Encode(item.SupplierId) %></td> 
     <td><%= Html.Encode(String.Format("{0:g}", item.InvoiceDate)) %></td> 
     <td><%= Html.Encode(String.Format("{0:F}", item.TotalValue)) %></td> 
     <td><%= Html.Encode(String.Format("{0:g}", item.InputDate)) %></td> 
     <td><%= Html.Encode(String.Format("{0:g}", item.PaymentDueDate)) %></td> 
     <td><%= Html.Encode(item.InvoiceStatusId) %></td> 
     <td><%= Html.Encode(item.AuthoriserId) %></td> 
    </tr> 
<% } %> 
</table> 

J'ai quelques JQuery:

$(document).ready(function() { 
    $("#InvoiceDropDown").change(function() { 
     $("#SearchResults").load("/Invoice/InvoiceSearchResults/");  
    }); 
}); 

J'ai supprimé une partie du code que je sais qui fonctionne pour rendre la question plus facile à lire. Quand je clique sur le mon DropDownList il appelle le JQuery, va à mon contrôleur et semble exécuter la classe partielle mais il ne rend rien.

J'ai essayé la réponse de evilDonald et la même chose se passe donc peut-être quelque chose de stupide que j'ai fait quelque part?

Toute aide ou conseil général ici très apprécié.

+0

désolé - le formatage est parti pour cet article :). Vous devez vous déconnecter et relancer plus tard> – Davy

+0

Regardez la réponse du serveur dans le panneau Net de Fiddler ou Firebug. Est-ce que ça a l'air juste? –

+0

C'est un xmlHHTPRequest et ça a l'air OK - devrais-je utiliser JSON ou quelque chose comme ça n'est pas html? – Davy

Répondre

2
$("#SearchResults").load("/Invoice/InvoiceSearchResults/"); 

aurait dû être:

$(".SearchResults").load("/Invoice/InvoiceSearchResults/");  

questions de sélection - ne pouvaient pas le voir pour le regarder.

Merci (EvilDonald - J'ai voté votre réponse)

+2

Merci de m'avoir montré que vous pouvez appeler un contrôleur avec une méthode load()! Jusqu'à présent, je ne savais pas que vous pouviez faire cela: D – Evildonald

9

J'ai une solution pour vous:

Plutôt que d'utiliser

$("#SearchResults").load("/Invoice/InvoiceSearchResults/"); 

Essayez d'utiliser un .ajax de $() pour demander au contrôleur, puis mettre la réponse dans le code HTML. J'ai ce travail avec succès et je vais essayer de paraphraser la réponse ci-dessous:

méthode contrôleur

Gardez la même

public ActionResult InvoiceSearchResults() 
{       
    return PartialView("InvoiceSearchResults",_invoiceService.FindAllInvoices()); 
} 

Ajax Appel

$.ajax({ 
    url: "/Invoice/InvoiceSearchResults/", 
    type: 'GET', 
    dataType: 'html', // <-- to expect an html response 
    success: doSubmitSuccess 
}); 

Méthode OnSuccess js

function doSubmitSuccess(result) 
{ 
    $('div#MyDiv').html(result); 
} 
+0

Je viens de changer le code un peu pour utiliser vos exemples de code – Evildonald

+0

Merci - la même chose se passe. Est-ce que je manque quelque chose de basique? – Davy

+1

Ces deux (load et ajax/success/html) font la même chose. –

0

Hmm ... bien que le code devrait fonctionner au-dessus (le .ajax $ aussi.) J'utilise une troisième approche pour rendre mes partials . Une requête $ .get.

Voici un exemple

$.get(postUrl, function(data) { 
       $("#posts").append(data); 
       $('#ajaxLdMore').addClass('hideElement'); 
       $('#ldMore').removeClass('hideElement'); 
      }); 

Alors vous peut-être obtenir une troisième fois la chance.

+0

voir ma réponse ci-dessous - merci pour votre réponse. . – Davy

+0

Ouais, je l'ai vu après que j'avais déjà posté ceci. –

Questions connexes