2016-06-20 3 views
0

Я создаю веб-приложение MVC5 и хочу сделать динамический просмотр страницы с помощью Knockout.js. Тем не менее, я обнаружил, что Knockout.Mapping, похоже, не работает правильно в моем проекте.Как я могу сделать Knockout.Mapping работать в ASP.NET Web App?

Как вы видите, Intellisense не предлагает плагин отображения (я включил ссылку плагина в _reference.js). И он не может показать второе предупреждение, написанное, когда я завершаю эту строку насильственно.

Должен ли я сделать что-то еще, чтобы оно работало правильно?

@if (false) 
{ 
<script src = "~/Scripts/knockout-3.4.0.js" ></script > 
<script src = "~/Scripts/knockout.mapping-latest.js"></script > 
} 

<script type="text/javascript" src="@Url.Content("~/Scripts/knockout-3.4.0.js")"></script> 
<script type="text/javascript" src="@Url.Content("~/Scripts/knockout.mapping-latest.js")"></script> 

//~~body~~// 

<script type="text/javascript"> 
alert("1"); 
var json = '@Html.Raw(Json.Encode(Model))'; 
b = ko.mapping.fromJson(json); //"mapping" is not suggested when "ko." is put. 
//b = ko.mapping.fromJson(Model); //mistake at the original post 
ko.applyBindings(b); 
alert("2"); // not showed when the previous two lines is active. 
</script> 

Intellisense is not working

+0

Вы не пытались установить модель в начале страницы с помощью @model, не так ли? – Guto

+0

Да, я помещаю «@model ...», ссылаясь на viewmodel в начале cshtml. –

+0

Я обнаружил, что совершил ошибку в коде и не загрузил скриншот. Я изменил сообщение, оставив исходные строки. Извините за недоразумение. –

ответ

0

Извините за задержку наблюдения. В конце концов я сделать его работу с помощью

<script src="~/Scripts/knockout-3.4.0.js"></script> 
<script src="~/Scripts/knockout.mapping-latest.js"></script>  

//~~body~~// 

@section scripts{ 
     <script src="~/Scripts/knockout-3.4.0.js"></script> 
     <script src="~/Scripts/knockout.mapping-latest.js"></script> 
} 

и показать предположить, поставив

/// <reference path="knockout.mapping-latest.js" /> 

после обращения основной библиотеки knockout.js в _reference.js.

0

Посмотрите на помощь доступной here.

Я думаю, что пример вам нужно будет создать отображение это:

ko.mapping.fromJS(@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model))) 
+0

Это не работает ... Я проверил, что пакет Newtonsoft установлен правильно. В любом случае, спасибо за ваше предложение. –

0

Попробуйте это.

var ViewModel = function() { 
    var self = this; 

    self.formData2 = ko.mapping.fromJS(@Html.Raw(Json.Encode(Model))); 
} 

и в контроллере:

public ActionResult Index() 
    { 

     return View(new ExecutivoViewModel()); 
    } 

Мои ViewModel Класс:

public class ExecutivoViewModel 
{ 
    public ExecutivoViewModel() { } 

    public ExecutivoViewModel(Executivo entidade) 
    { 
     this.ExecutivoId = entidade.ExecutivoId; 
     this.Nome = entidade.Nome; 
     this.Cargo = entidade.Cargo; 
     this.Inativo = entidade.Inativo; 
    } 

    [DisplayName("Executivo ID")] 
    [Required] 
    public int ExecutivoId { get; set; } 

    [DisplayName("Nome")] 
    [MaxLength(50)] 
    [Required] 
    public string Nome { get; set; } 

    [DisplayName("Cargo")] 
    [MaxLength(50)] 
    [Required] 
    public string Cargo { get; set; } 

    [DisplayName("Inativo")] 
    public bool Inativo { get; set; } 

enter image description here

+0

Спасибо за ваш ответ, я скоро попробую предложенный вами подход и обновить результат. –