2013-03-17 6 views
13

Ich habe den folgenden Code in meinem MVC-Controller:Rendering eines einfach ASP.NET MVC PartialView mit JQuery Ajax Beitrag Anruf

[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); 
} 

diese dann an der Spitze meiner Ansicht nach in meinem javascript:

$(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 
    } 
}); 

Dann endlich mein html:

<div id="divPartialView"> 

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

</div> 

Im Wesentlichen, wenn eine meiner Drop-Down-Tag (die eine Klasse namens SelectedCustomer hat) hat Ein onchange gefeuert es sollte den Post-Anruf auslösen. Was es tut und ich kann in meinem Controller debuggen und es geht sogar zurück erfolgreich das PartialViewResult zurück, aber dann wird der Erfolg SetData() Funktion nicht aufgerufen und stattdessen bekomme ich einen 500 internen Server Fehler wie unten auf Google CHromes Konsole:

POST http: // localhost: 45108/Startseite/GetPartialDiv/1 500 (Interner Server Fehler) 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 (anonyme Funktion) 5:25 b.event.dispatch jquery-1.9.1.min.js: 3 b.event.add.v .handle jquery-1.9.1.min.js: 3

Irgendwelche Ideen, was ich falsch mache? Ich habe diesen zu Tode gegoogelt!

Antwort

18

diese Linie ist nicht wahr: url: "@Url.Action("GetPartialDiv/")" + $(this).val(),

$.ajaxdata Attribut ist bereits Route Wert enthalten. Definieren Sie einfach URL in url Attribut. Schreibe Routenwert in data Attribut.

+0

netter Ort, realisierte nur seine sinnlose mich tun und übergibt es als Query String/Route Wert zu. aber ich denke, dass ich das Problem als meine partielle Ansicht fand, musste ich es ändern, um PartialView zurückzugeben ("MyPartialView", guestResponse); – User101

+0

Ich meine Rückkehr PartialView ("~/Ansichten/MyPartialView.cshtml", guestResponse); stattdessen was ist komisch, wie sollte es einfach funktionieren nein? – User101

+0

Der Grund, warum Sie angeben müssen, wo sich die Ansicht befindet, liegt darin, dass Sie sie nicht an einem der Standardspeicherorte platziert haben, zB ~/Views/WhateverTheControllernameIs/MyPartialView.cshtml oder ~/Views/Shared/MyPartialView.cshtml – StanK