У меня есть быстрый вопрос относительно шаблона проектирования MVVM ... Мне просто интересно, способ, которым я занимаюсь, - это «правильный» способ?ASP.Net MVC - правильное выполнение MVVM
У меня есть режим категории, как так:
[Table("Category")]
public class CategoryModel
{
[Key]
public Int32 CategoryId { get; set; }
public string CategoryName { get; set; }
public Int32? Category_ParentID { get; set; }
public virtual CategoryModel Parent_Category { get; set; }
public virtual ICollection<CategoryModel> SubCategories { get; set; }
public Int16 CategoryOrder { get; set; }
public bool Deleted { get; set; }
}
Не все из них нужно на «Создать новую категорию» формы, поэтому я создал ViewModel только с необходимыми полями:
public class CategoryViewModel
{
public string CategoryName { get; set; }
public Int32? Category_ParentID { get; set; }
}
Когда новая категория создается, я посылаю в ViewModel как parement, и создать новый CategoryModel, используя значения из ViewModel, например, так:
if (ModelState.IsValid)
{
CategoryModel newCategory = new CategoryModel()
{
CategoryName = model.CategoryName,
Category_ParentID = model.Category_ParentID
};
//get the root node, and include it's subcategories
var categoryList = DatabaseContext.Categories.Include("SubCategories").Single(c => c.CategoryId == model.Category_ParentID);
//set the order of the category by getting the number of subcategories
if (categoryList.SubCategories.Count > 0)
newCategory.CategoryOrder = (Int16)(categoryList.SubCategories.Where(c => !c.Deleted).Max(c => c.CategoryOrder) + 1);
else
newCategory.CategoryOrder = 1;
//save the new category
DatabaseContext.Categories.Add(newCategory);
await DatabaseContext.SaveChangesAsync();
return PartialView("_CategoryModelItem", model);
} else {
return new HttpStatusCodeResult(HttpStatusCode.InternalServerError);
}
Это правильный способ создания шаблона проектирования MVVM (т. значения берутся из ViewModel, создается новая модель - принимает значения из ViewModel и записывается в БД)? или я не понимаю, как это должно быть сделано?
Также
Как работает "Просмотр" часть работы? Я имею в виду, если я перечислю категорию и все ее подкатегории в методе Index() контроллера ... должен ли я использовать модель или модель просмотра для их отображения? Поэтому мне нужно добавить добавить ICollection в ViewModel, а затем я должен захватить данные с помощью Entity Framework и класса Model, а затем каким-то образом передать это в ViewModel?
+1 с точки зрения использования модели представления для рендеринга и публикации только тех свойств, которые вам нужны.При проверке правильности «ModelState» вы, вероятно, захотите вернуть представление, чтобы пользователь мог исправить любую ошибку проверки, вместо того чтобы бросать ошибку и не уверен, что «возвращает PartialView (« _ CategoryModelItem », model);' is? - Не переадресовываете ли вы на индексную страницу? –
Просто использование ViewModels в приложении MVC не является MVVM. MVVM основан на концепции наблюдаемой и IPropertyNotification. Он широко используется в Silverlight/WPF и в веб-разработке с использованием кендо, нокаутом или угловым. – Fran