2017-03-09 4 views
0

Ich versuche, ein Objekt aus einem cshtml Blick auf JQuery, cshtml Code weitergeben muß:ein Objekt aus cshtml Blick auf JQuery Passing

foreach (var item in Model) 
      {    
        <tr class="link" data-graduate="@item" data-url="@Url.Action("PopulateModal","CMIPGraduate")"> 
         <td>@Html.DisplayFor(display => item.State)</td> 
         <td>@Html.DisplayFor(display => item.Name)</td>       
        </tr>    
      } 

JQuery-Code: ist

$(document).ready(function() {  
    $(".link").click(function() { 
     alert($(".link").data("graduate")) 
     $.ajax({ 
      type: "get", 
      url: $(".link").data("url"),    
      data:{graduate:$(".link").data("graduate")} 
     }) 
     $("#myModal").modal("show"); 
    }) 
}) 

Das Objekt immer null Wenn es zum Controller kommt, versuche ich es mit einem alert in meinem JQuery Code anzuzeigen, wie Sie sehen, aber alles, was ich bekomme, ist etwas wie dieses: MyProject.Viewmodels.MyClassVM, ich habe versucht, alert(JSON.stringify($(".link").data("graduate"))) zu verwenden, aber ich bekomme die gleichen Ergebnisse . Ich weiß, dass ich in meiner cshtml Ansicht so etwas tun könnte:

<tr class="link" data-graduate="@item.Name" data-url="@Url.Action("PopulateModal","CMIPGraduate")"> 

und ich werde den Namen einfach auf meiner JQuery Funktion, aber ich mag nicht ein data- Attribut in meiner cshtml Ansicht von Feld erstellen was wenn ich 500 fielsd habe? Ich würde es vorziehen, das ganze Objekt zu bekommen und es an meine Controller-Aktion zu senden. Für den Fall, das ist meine Controller-Aktion:

public ActionResult PopulateModal(MyClassVM graduate) 
     { 
      return PartialView(graduate); 
     } 

Antwort

1

Nun, das war hilfreich: ASP.NET MVC: How to convert View Model into Json object Aber was tat wirklich der Trick diesen Code in meiner Ansicht zu ändern war (@Json.Encode(item) hinzugefügt):

 <tr class="link" data-graduate="@Json.Encode(item)" data-url="@Url.Action("PopulateModal","CMIPGraduate")"> 
+0

Um richtig zu sein, sollte es '@ Html.Raw (Json.Encode (item))' sein. Aber warum würdest du die Leistung herabsetzen, indem du all das zusätzliche HTML generierst und es unverändert zurückschickst? Gib einfach die 'ID' des Items ein und poste dieses Paket (und hole das Objekt aus dem Repository basierend auf der 'ID'). –

+0

@StephenMuecke Ich benutze ein Modal, und wenn eine Zeile angeklickt wird (' $ (". Link ") .click") Ich möchte das Modal mit einigen Feldern des Objekts dieser Zeile anzeigen. Ist es Ihrer Meinung nach besser für die Performance, die ID einfach an den Controller zu senden und eine Suche in der Sammlung durchzuführen? Das wäre besser, als das komplette Objekt direkt auf dem Controller zu posten und dann keine Suche durchzuführen? – AlexGH

+0

Es gibt ein paar davon zu beachten. Zuerst hast du gesagt: _was wenn ich 500 fiels_ (sic) habe Wenn deine Anzeige 20 Zeilen mit so vielen Feldern (oder sogar 50 Feldern) sagt, werden deine Benutzer mit langsamen Verbindungen nach dir mit Baseballschlägern kommen :) –

Verwandte Themen