Z ASP .NET MVC5, jak odzyskać model w JavaScript? Oto moje kody

Ctrl:

public ActionResult Test() {

    var data = List<string>() {
        "test",
        "essai"
    };

    return View(data); 
}

Widok:

@model ...

@section scripts {
    <script src="~/Scripts/Parametre/DatePublication.js"></script>
}

częściowy JS:

$(document).ready(function () {
    console.log(@Model);
});

@Model w częściowym JS nie jest znaleziony.

1
Heriniaina 26 wrzesień 2017, 14:09

2 odpowiedzi

Najlepsza odpowiedź

Nie można tego zrobić w maszynce , ponieważ w brzytwa Każda zawartość przy użyciu bloku @ jest automatycznie HTML zakodowany przez brzytwa.

Rozwiązaniem jest do założenia listy i utworzyć tablicę javascript.

var myArray = [];
@foreach (var item in Model)
{
    @:myArray.push('@item');
}
console.log(myArray);

W bloku {X0}} musisz zaznaczyć markup lub Javascript przy użyciu znacznika @:} lub <text>.

1
Mihai Alexandru-Ionut 26 wrzesień 2017, 11:28

Model będzie działać tylko w goleniach, które mogą wykonać kod serwera. Jeśli chcesz to jako tablicę JavaScript w zewnętrznym pliku JavaScript, możesz przeczytać go do zmiennej w tablicy JS w widoku i używać go później w innych skryptach

 <script>
     var myArray = @Html.Raw(JsonConvert.SerializeObject(Model))
     console.log(myArray);
 </script>
 <script src="ExternalJsFile.js"></script>

Teraz możesz uzyskać dostęp do miarray w ExternalJsFile.js.

Przekazanie danych za pomocą prostych zmiennych globalnych nie są doskonałym pomysłem. Są podatne na zastąpienie.

Na przykład,

 <script>
     var myApp = myApp || {};  
     myApp.pageData = myApp.pageData || {};
     myApp.pageData.model = @Html.Raw(JsonConvert.SerializeObject(Model));
 </script>
 <script src="ExternalJsFile.js"></script>

Teraz w pliku EXTERNJS możesz uzyskać dostęp do niego jak console.log(myApp.pageData.model)

0
Shyju 26 wrzesień 2017, 11:52