2016-07-19 7 views
0

Ich verwende obigen Code, um ein Formular unter Verwendung von Daten in Model zu übermitteln. Das Problem ist, dass ich es tun möchte, nachdem die Seite geladen wurde und der Benutzer eine Auswahl trifft. Aber der Rasierklingen-Code rendert, bevor das Dokument fertig ist, und wenn ich auf diese Schaltfläche klicke, werden die Daten zu 0 Index des Modells in dieses Skript geladen. Kann ich das Modell in dieser Funktion trotzdem durchlaufen?Render Razor-Code in JS-Funktion, nachdem das Dokument geladen wurde

+0

Sie können die JavaScript-Variable nicht an den Server-Seitencode von Razor übergeben. – Satpal

+0

@Satpal: Irgendeine Lösung für dieses Problem? –

Antwort

1

Sie können JavaScript-Variablen nicht an eine Razor-Variable übergeben/konvertieren. Razor-Variable wird von Razor-Engine behandelt wo als JavaScript auf der anderen Seite ist eine Client-Seite Sprache auf dem Client ausgeführt wird.

Razor ist eine View-Engine, die vom ASP.NET MVC-Framework verwendet wird, das auf dem Server ausgeführt wird, um eine HTML-Vorlage zu erstellen.

Sie können jedoch verwenden Json.Encode Methode konvertiert ein Datenobjekt in eine Zeichenfolge, die im JavaScript-Objekt Notation (JSON) -Format ist. Dann führen Sie Ihre Operation mit ihm aus.

//Convert Model to JSON 
var model = @Html.Raw(Json.Encode(Model)); 

$("body").on("click", "#ActionButton", function (e) { 
    //set current select index 
    currentBook = $(this).attr("data-bookId"); 
    //set title 

    $("#BookAction .modal-title").text(model[currentBook].BookName); 

    //get list of current book forms 
    var currentFormsList = model[currentBook].FormList; 

    // collapse fill new data list if expanded 
    swap('FillNewData', true); 
    $("#FillNewData").empty(); 

    for (int k = 0; k < currentFormsList.length; k++) 
    { 
     //Create link 
     $('<li />') 
      .addClass("SubmitForm list-group-item bg-grey-300") 
      .data('FormLink', currentFormsList[k].FormLink) 
      .data('FormHideExtraValue', currentFormsList[k].FormHideExtraValue) 
      .data('FormActionLink', model[currentBook].FormActionLink) 
      .html(currentFormsList[k].FormName) 
      .appendTo("#FillNewData"); 
    } 
}); 

$("#FillNewData").on('click', 'li.SubmitForm', function(){ 
    SubmitForm(
     $(this).data('FormLink'), 
     $(this).data('FormHideExtraValue'), 
     $(this).data('FormActionLink'), 
    ) 
}) 
+0

Danke für die Antwort. Ich dachte daran, das gleiche zu tun, das Modell hat viele Bilder in Base64 und eine Menge Textdaten, Converting es in JSON ist eine gute Idee? die Natur des Modells im Blick behalten. –

+1

Persönlich möchte ich keine Bilder in JSON-Daten persistieren, aber für Textdaten ist es in Ordnung. Eine andere Methode, die ich empfehlen würde, ist die Verwendung einer Teilansicht, die mit einer Aktion erstellt wurde – Satpal

Verwandte Themen