2013-03-17 7 views
13

ho il seguente codice nel mio controller MVC:Il rendering di una semplice ASP.NET MVC PartialView utilizzando jQuery Ajax Messaggio chiamata

[HttpPost] 
public PartialViewResult GetPartialDiv(int id /* drop down value */) 
{ 
    PartyInvites.Models.GuestResponse guestResponse = new PartyInvites.Models.GuestResponse(); 
    guestResponse.Name = "this was generated from this ddl id:"; 

    return PartialView("MyPartialView", guestResponse); 
} 

Allora questo nel mio javascript nella parte superiore del mio punto di vista:

$(document).ready(function() { 

$(".SelectedCustomer").change(function (event) { 
    $.ajax({ 
     url: "@Url.Action("GetPartialDiv/")" + $(this).val(), 
     data: { id : $(this).val() /* add other additional parameters */ }, 
     cache: false, 
     type: "POST", 
     dataType: "html", 
     success: function (data, textStatus, XMLHttpRequest) { 
      SetData(data); 
     } 
    }); 

}); 

    function SetData(data) 
    { 
     $("#divPartialView").html(data); // HTML DOM replace 
    } 
}); 

Poi finalmente il mio html:

<div id="divPartialView"> 

    @Html.Partial("~/Views/MyPartialView.cshtml", Model) 

</div> 

In sostanza, quando un mio tag discesa (che ha una classe chiamata SelectedCustomer) ha un onchange licenziato dovrebbe sparare la chiamata post. Che cosa fa e posso eseguire il debug nel mio controller e torna indietro con successo restituisce il PartialViewResult ma poi la funzione SetData() non viene richiamata e invece ricevo un errore del server interno 500 come sotto sulla console Google Chat:

POST http: // localhost: 45108/Home/GetPartialDiv/1 500 (server interno Errore) jquery-1.9.1.min.js: 5 b.ajaxTransport.send jquery-1.9.1.min.js : 5 b.extend.ajax jquery-1.9.1.min.js: 5 (funzione anonimo ) 5:25 b.event.dispatch jquery-1.9.1.min.js: 3 b.event.add.v .handle jquery-1.9.1.min.js: 3

Qualche idea su cosa sto facendo male? Ho cercato su Google questo a morte!

risposta

18

questa linea non è vero: url: "@Url.Action("GetPartialDiv/")" + $(this).val(),

$.ajaxdata attributo è già incluso il valore del percorso. Quindi basta definire l'url nell'attributo url. scrivere il valore del percorso nell'attributo data.

$(".SelectedCustomer").change(function (event) { 
    $.ajax({ 
     url: '@Url.Action("GetPartialDiv", "Home")', 
     data: { id : $(this).val() /* add other additional parameters */ }, 
     cache: false, 
     type: "POST", 
     dataType: "html", 
     success: function (data, textStatus, XMLHttpRequest) { 
      SetData(data); 
     } 
    }); 
}); 
+0

bel posto, mi sono appena reso conto che è inutile farlo e passarlo come valore stringa/percorso di query. comunque penso di aver trovato il problema essendo la mia vista parziale, ho dovuto cambiarlo per tornare PartialView ("MyPartialView", guestResponse); – User101

+0

Intendo restituire PartialView ("~/Views/MyPartialView.cshtml", guestResponse); invece che è strano, come dovrebbe funzionare no? – User101

+0

Il motivo per cui è necessario specificare dove si trova la vista è perché non lo si è inserito in una delle posizioni predefinite, ad esempio ~/Views/WhateverTheControllerNameIs/MyPartialView.cshtml o ~/Views/Shared/MyPartialView.cshtml – StanK

Problemi correlati