标签: viewmodel

带有List <BaseClass>的ViewModel和编辑器模板

我有一个视图,列出要添加到平面图的表.从表中获得TableInputModel允许RectangleTableInputModel,CircleTableInputModel

ViewModel有一个列表,TableInputModel其中包含所有派生类型.

我对每个派生类型都有局部视图,并且给定了一个List混合派生类型,框架知道如何渲染它们.

但是,在提交表单时,类型信息会丢失.我尝试使用自定义模型绑定器,但因为类型信息在提交时丢失了,所以它不会工作...

有人曾尝试过这个吗?

asp.net-mvc model-binding viewmodel asp.net-mvc-3

37
推荐指数
1
解决办法
1万
查看次数

ASP.NET MVC - 如何使用View Models

假设我有一个允许编辑用户详细信息的页面,所以我有一个像这样的ViewModel:

public class UserViewModel {
    public string Username { get; set; }
    public string Password { get; set; }
    public int ManagerId { get; set; }
    public string Category { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

所以在我的EditUser操作中,我可以通过模型绑定器传回它,然后我可以将其映射到域模型:

public ActionResult EditUser(UserViewModel user) {
    ...
Run Code Online (Sandbox Code Playgroud)

但是,显示表单的页面还需要详细信息,例如管理器和类别列表,以提供这些字段的下拉列表.它还可能会在侧边栏中显示其他用户的列表,以便您可以在正在编辑的不同用户之间切换.

那么我有另一个视图模型:

public class ViewUserViewModel {
    public UserViewModel EditingUser { get; set; }
    public IEnumerable<SelectListItem> Managers { get; set; }
    public IEnumerable<SelectListItem> Categories { get; set; }
    public IEnumerable<SelectListItem> AllUsers { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?它们都是View Models吗?如果是这样,我是否应该使用命名约定,以便区分类似模型的虚拟机和仅包含页面数据的虚拟机?

我错了吗?

asp.net-mvc viewmodel

36
推荐指数
3
解决办法
4万
查看次数

MVVM ViewModel与MVC ViewModel

ViewModel是MVVM(Model-View-ViewModel)和ASP.NET MVC的推荐实现中使用的术语.研究"ViewModel"可能会让人感到困惑,因为每个模式都使用相同的术语.

MVC ViewModel和MVVM ViewModel之间的主要区别是什么?例如,我认为MVVM ViewModel更加丰富,因为缺少Controller.这是真的?

asp.net-mvc design-patterns mvvm viewmodel

35
推荐指数
3
解决办法
1万
查看次数

你如何填充/验证你的ViewModels?

我很好奇人们构建ViewModel的各种方式以及他们选择该方法的原因.

我可以在这里想到几种方法:

-1.注入的存储库 - 控制器加载模型并映射到ViewModel.在这里,ViewModel构造函数可以采用各种集合来为ex设置.在选择列表中,例如:


public CustomerController(ISomeRepository repository)
{
   _repository = repository;
}

public ActionResult Create()
{
  CustomerCreateViewModel model = new CustomerCreateViewModel(_repository.GetShipTypes, 
                                                                _repository.GetStates);
..
..
}

-2.ViewModelBuilder - 在控制器中注入或实例化注入存储库的实例.通过类似的东西调用

>var orderViewModel = orderViewModelBuilder.WithStates().Build(orderId);
Run Code Online (Sandbox Code Playgroud)

要么,

var orderViewModel = orderViewModelBuilder.WithStates().Build(orderId);
Run Code Online (Sandbox Code Playgroud)

-3.直接在控制器中(无需代码 - 杂乱无章)

-4.一些其他服务(注入或不注入)返回控制器随后映射的域模型或ViewModel(执行此操作的任何人返回未明确命名/注释为ViewModel构建器类的视图模型?)


public JobCreateViewModel BuildJobCreateViewModel(int parentId)
{
   JobCreateViewModel model = new JobCreateViewModel();
   model.JobStatus = _unitOfWork.JobRepository.GetJobStatuses();
   model.States=_unitOfWork.StateRepository.GetAll();
   return model;
}
Run Code Online (Sandbox Code Playgroud)

现在回程 - 关于验证您的视图模型 - 您是从基础ViewModel类继承标准验证,还是在所有ViewModel之间复制验证(例如数据注释属性),或者只是依赖于服务器端验证,以便它可以再次验证您的域对象吗?

还有其他人?还有什么更好的?为什么?

编辑 根据下面的链接,我确实找到了Jimmy Bogard关于ViewModels架构的好文章.虽然它没有直接解决上面的问题,但对于来这里查看ViewModel信息的人来说,它是一个很好的参考. http://lostechies.com/jimmybogard/2009/06/30/how-we-do-mvc-view-models/

model-view-controller asp.net-mvc viewmodel asp.net-mvc-3

34
推荐指数
1
解决办法
6028
查看次数

在iOS中使用MVVM

我是一名iOS开发人员,我在项目中使用Massive View控制器,因此我一直在寻找一种更好的方法来构建我的项目,并且遇到了MVVM(Model-View-ViewModel)架构.我一直在用iOS阅读很多MVVM,我有几个问题.我将用一个例子来解释我的问题.

我有一个名为的控制器LoginViewController.

LoginViewController.swift

import UIKit

class LoginViewController: UIViewController {

    @IBOutlet private var usernameTextField: UITextField!
    @IBOutlet private var passwordTextField: UITextField!

    private let loginViewModel = LoginViewModel()

    override func viewDidLoad() {
        super.viewDidLoad()

    }

    @IBAction func loginButtonPressed(sender: UIButton) {
        loginViewModel.login()
    }
}
Run Code Online (Sandbox Code Playgroud)

它没有Model类.但我确实创建了一个名为LoginViewModel放置验证逻辑和网络调用的视图模型.

LoginViewModel.swift

import Foundation

class LoginViewModel {

    var username: String?
    var password: String?

    init(username: String? = nil, password: String? = nil) {
        self.username = username
        self.password = password
    }

    func validate() {
        if username == nil || …
Run Code Online (Sandbox Code Playgroud)

controller model mvvm viewmodel ios

34
推荐指数
2
解决办法
8698
查看次数

ViewModels还是ViewBag?

我是MVC4,EF5和ASP.Net的新手,我似乎无法在任何地方找到一个好的答案.

基本上,是否应该通过视图模型完成所有操作,还是可以合并viewbag?

假设我有一个填充下拉列表的方法,我使用viewmodel来表示视图的输出.

我可以使用Viewbag.DropDown = PopulateDropdown();或者将它合并到ViewModel中更好,通过创建一个属性来保存List<SelectListItem>创建者PopulateDropdown();吗?

我知道ViewBag有多方便,但是我还没有看到任何不使用它的坚实理由?如果有人也能为我提供更多的见解,那就太棒了.

viewmodel viewbag asp.net-mvc-4

33
推荐指数
2
解决办法
1万
查看次数

在'/activity_login.xml'DataBinding文件中找到重复的类,未生成BR

我大多陷入了android数据绑定BR问题.始终有单个activity.xml,但生成的绑定类显示错误.请让我知道如何解决此问题.

在此输入图像描述

data-binding android mvvm viewmodel android-databinding

33
推荐指数
2
解决办法
1万
查看次数

将验证属性从域实体映射到DTO

我有一个标准的Domain Layer实体:

public class Product
{
    public int Id { get; set; }

    public string Name { get; set; }

    public decimal Price { get; set;}
}
Run Code Online (Sandbox Code Playgroud)

它具有某种验证属性:

public class Product
{
    public int Id { get; set; }

    [NotEmpty, NotShorterThan10Characters, NotLongerThan100Characters]
    public string Name { get; set; }

    [NotLessThan0]
    public decimal Price { get; set;}
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我已经完全弥补了这些属性.这里使用的验证框架(NHibernate Validator,DataAnnotations,ValidationApplicationBlock,Castle Validator等)并不重要.

在我的客户端层,我也有一个标准设置,我不使用域实体本身,而是将它们映射到我的视图层使用的ViewModels(aka DTO):

public class ProductViewModel
{
    public int Id { get; set; }

    public string Name { get; set; } …
Run Code Online (Sandbox Code Playgroud)

validation asp.net-mvc domain-driven-design dto viewmodel

32
推荐指数
2
解决办法
8384
查看次数

ASP.NET MVC 2 - Html.DropDownList与ViewModel的混淆

我对如何在ASP.NET MVC 2.0 R2上使用新的强类型Html.DropDownListFor帮助程序感到十分迷茫和困惑

在我写的视图中:

<%= Html.DropDownListFor(m => m.ParentCategory, new SelectList(Model.Categories, "CategoryId", "Name", Model.ParentCategory), "[ None ]")%>

<%= Html.ValidationMessageFor(m => m.ParentCategory)%>
Run Code Online (Sandbox Code Playgroud)

因此我的Model对象是:

public class CategoryForm : FormModelBase
{
    public CategoryForm()
    {
        Categories = new List<Category>();

        Categories.Add(new CategoryForm.Category() {
                           CategoryId = 1, 
                           Name = "CPUs" });
        Categories.Add(new CategoryForm.Category() { 
                           CategoryId = 2, 
                           Name = "Memory" });
        Categories.Add(new CategoryForm.Category() { 
                           CategoryId = 3, 
                           Name = "Hard drives" });
    }

    // ...other props, snip... //

    public Category ParentCategory { get; set; }

    public …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc html-helper viewmodel asp.net-mvc-2 drop-down-menu

32
推荐指数
3
解决办法
8万
查看次数

vue.js - 组织具有多个视图的大型单页面应用程序

我正在玩新的MVVM框架 - Vue.js(http://vuejs.org/).

这在简单的示例和演示中非常好,但现在我正在尝试使用多个视图创建大型SPA,并且我意识到框架的文档中没有描述如何执行它的最佳模式.

主要问题是我不知道如何处理不同路径上的视图.

例如,我使用Director(https://github.com/flatiron/director)进行路由,但是如何更改视图?

var booksCtrl = function () {
   var booksViewModel = new Vue({
       el: '#books'
       data: { ... }
       ready: function () {
          // hide previous ViewModel and display this one??
       }
   });
};

var editBookCtrl = function (id) { 
   var editBookViewModel = new Vue({
       el: '#editBook'
       data: { ... }
       ready: function () {
          // hide previous ViewModel and display this one??
       }
   });
};

var routes = …
Run Code Online (Sandbox Code Playgroud)

javascript router viewmodel single-page-application vue.js

32
推荐指数
2
解决办法
2万
查看次数