В ASP.NET MVC есть Модель, Представление и Контроллер.
МОДЕЛЬ представляет сущности, которые хранятся в базе данных и, по сути, представляют собой все данные, используемые в приложении (например, сгенерированные EntityFramework, «БД».Первый «подход».
Не все данные из модели, которые вы хотите показать в представлении (например, хэши паролей).Таким образом, вы создаете МОДЕЛЬ ПРОСМОТРА, каждый для каждого строго типизированного вида бритвы, который у вас есть в приложении.Например:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MyProject.ViewModels.SomeController.SomeAction
{
public class ViewModel
{
public ViewModel()
{
Entities1 = new List<ViewEntity1>();
Entities2 = new List<ViewEntity2>();
}
public List<ViewEntity1> Entities1 { get; set; }
public List<ViewEntity2> Entities2 { get; set; }
}
public class ViewEntity1
{
//some properties from original DB-entity you want to show
}
public class ViewEntity2
{
}
}
Когда вы создаете сложные клиентские интерфейсы (я это делаю), вы используете какой-то шаблон для javascript на клиенте, MVC или MVVM (я знаю только эти).Итак, с MVC на клиенте у вас есть другая модель (например, Backbone.Model), которая является третьей моделью в приложении.Это немного много.
Почему мы не используем ту же модель ViewModel на клиенте (в backbone.js или другом фреймворке)?Есть ли способ перевести CS-кодированную модель в JS-кодированную?Как в шаблоне MVVM, с knockout.js , когда вы можете сделать это следующим образом:
в SomeAction.cshtml:
<div style="display: none;" id="view_model">@Json.Encode(Model)</div>
после этого в Javascript-коде
var ViewModel = ko.mapping.fromJSON($("#view_model").get(0).innerHTML);
теперь вы можете расширить вашу ViewModel некоторыми действиями, обработчиками событий и т. Д .:
ko.utils.extend(ViewModel, {
some_function: function () {
//some code
}
});
Итак, мы не строим ту же модель представления наклиент снова, мы переносим существующую модель представления с сервера.По крайней мере, data.
Но knockout.js мне не подходит, с ним нельзя построить сложный интерфейс, это просто привязка данных.Мне нужно что-то более структурное, например backbone.js.
Единственный способ построить ViewModel для backbone.js, который я сейчас вижу, это переписать ту же ViewModel в JS с сервера руками.
Есть ли способы перенести его с сервера?Чтобы повторно использовать одну и ту же модель представления в представлении сервера и представлении клиента?