Zugriff auf ViewData in jQuery funktioniert nicht

Ich versuche mich zu übergeben IList zurück in meine Anzeigen, wo Sie zugänglich sein können, in einer jQuery .jedes(), aber ich bin nicht mit irgendeinem Erfolg.

Beispiel-Klasse:

public class MyClass
{
    private string _Name = "";
    public int Id = null;

    public MyClass ( string Name, int Id = null )
    {
       ... Do something ...
    }

    public string Name 
    { 
        get
        {
            return _Name;
        }
        set
        {
            _Name = value;
        }
    }
}

Controller:

IList<MyClass> myClass = null;
myClass = GetNames();

ViewDataDictionary viewData = new ViewDataDictionary(null);
viewData.Add("myNames", Json(myClass));

//The string writer where to render the HTML code of the view
StringWriter stringWriter = new StringWriter();

//Render the Index view in a HTML string
ViewEngineResult viewResult = ViewEngines.Engines.FindView(ControllerContext,
    "GeneratePDF", null);

ViewContext viewContext = new ViewContext(
    ControllerContext,
    viewResult.View,
    viewData,
    new TempDataDictionary(),
    stringWriter
    );
viewResult.View.Render(viewContext, stringWriter);

... Omitted for brevity ...

In der View möchte ich, um jQuery verwenden zu Durchlaufen ViewData["myNames"]:

<script type="text/javascript">

    _myNames = '@ViewData["myNames"]';

    $.each(_myNames, function (i, item) {
        ...
    });

</script>

Die oben nicht funktioniert und leider bin ich mir nicht sicher, wie Sie Sie Debuggen, weil Sie die Ansicht aufgerufen wird, ist durch EvoPDF PDF-Generator.

Habe ich auch versucht, diese aus meiner Sicht:

<input type="hidden" id="myNames" value="@ViewData["myNames"]" />

<script type="text/javascript">

    _myNames = $('#myNames').val();

    $.each(_myNames, function (i, item) {

    });

</script>

Verfolgung durch die controller-code (wo EvoPDF rendert die Seite) ich kann sehen, dass das hidden-Feld mit dem Typ-Namen in das value-Attribut - nicht die Daten.

Ich verwendet habe, ViewData viele Male ohne problem, aber das ist ein bisschen anders als Nutzung ich bin vertraut mit. Kann mir jemand sagen, wie pass IList/Liste/IENumerable mit ViewData, so dass ich Durchlaufen es mit jQuery .each()?

BEARBEITEN

Als alternative, könnte ich ein jQuery-Aufruf von meinem Rasierer, aber ich bin mir nicht sicher, wie Sie Sie übergeben die variable an jQuery:

@foreach (var myName in (List<MyClass>)ViewData["myNames"])
{
    <tr>
    <td class="text-center">
        <script type="text/javascript">
            FormatName('@myName.Name', 1);
        </script>
    </td>
    </tr>
}

Aber myName.Name scheint nicht übergeben wird der FormatName () - Funktion. Ich weiß, für eine Tatsache, dass myName.Name enthält einen gültigen Wert, denn es macht gut, ohne das jQuery. Wie kann ich weitergeben, dass var auf meine jQuery-Funktion?

  • Ihre Anforderung ist etwas anders, entweder Sie machen können ajax-Aufruf und die Liste oder haben Sie, um eine benutzerdefinierte Helfer für Ihren Zweck..
  • Ich finde keine Dokumentation, das bestätigt, dass ein Ajax-Aufruf ist auch gültig mit dieser Methode. Das Beispiel, das ich Schlagsahne oben kommt hauptsächlich von einer EvoPDF Beispiel-code. Ich kann erfolgreich die übergabe von Daten mithilfe von ViewData und Durchlaufen Sie mit @foreach (var myName in (List<myNames>)ViewData["myNames"]) und der output ist in Ordnung. Aber ich habe mehrere Helfer-Funktionen, die in jQuery, die help-format die Daten ausgegeben und ich bin mir nicht sicher, wie Sie in der razor-C# - code. Was wäre ein custom-Helfer Aussehen?
  • Eigentlich ist der Grund, warum ich bin nicht mit Ajax, da gibt es Eingaben, die von einer anderen Seite. Auf der anderen Seite gibt es eine Schaltfläche, die angeklickt werden können, die zum erzeugen der PDF-Datei, aber es ist ein Ajax-POST selber. Es scheint clutsy zu passieren die gebuchten Werte (Parameter) von View zu Controller, dann die Controller-Ansicht wieder. Sie sagen, ich können nicht passieren Sie eine Json dieser Klasse, um meine Ansicht über ViewData und greifen Sie mit jQuery?
  • ich m nur zu sagen, dass die Weise, die Sie Durchlaufen viewdata in jquery ist falsch...besuchen Sie einfach dieses..forums.asp.net/t/... denken Sie benutzerdefinierte Helfer wird Ihr problem lösen..
  • danke für den netten link. Ich kann diesen Weg nicht gehen, obwohl ich bin neugierig, zu wissen, wenn Sie kommentieren, warum Json(myNames) im Controller nicht mehr befriedigen Json serialisiert, die für die Verwendung in der Ansicht von jQuery? Ich dachte, das ist, was es für verwendet wurde. Ich habe andere .each () - Routinen, die Verwendung von Json() Listen nach einem Ajax-Aufruf - oder ist das problem mit ViewData selbst?
  • ja, dass ist das, was ich sage, ist, dass mit ajax-Aufruf immer Liste von controller und dann kannst du das tun .each() und auch, wenn Sie Liste in viewdata Sie tun können, foreach in c# - code, sondern machen .jeder() mit viewdata-Liste in jquery ist nicht möglich, Sie sind nur mischen server-side und client-side code...
  • Es bekam. Danke. Ich habe ein edit in diesem post, dass wäre eine gute alternative, aber nicht wissen, wie man es zu funktionieren.

InformationsquelleAutor rwkiii | 2014-08-16
Schreibe einen Kommentar