相关疑难解决方法(0)

asp.net mvc强类型助手 - 你的渲染绑定对象应该与你的发布对象相同吗?

我看到asp.net mvc 2有强烈的输入帮助,并且最初看它的工作方式我认为也许我在asp.net mvc 1中做错了数据绑定以呈现视图并回发到控制器.

我经常有不同的对象来渲染视图并回发到控制器.这是错的?这似乎很自然,因为在渲染视图时,您经常会有一个包含下拉列表等的视图模型,但对于您的发布,您只需要回发所需的属性.

例如,在渲染的过程中,我的viewmodel可能看起来像这样

 public class PersonViewModel
 {
      public int Age;
      public string FIrst;
      public JobCategory[] JobCategories;
      public Sport[] Sports;
      public int NumberOfChildren;

 }
Run Code Online (Sandbox Code Playgroud)

在这种情况下,jobCategoriesSports将用于填充下拉框. NumberOfchildren将只是html放入,我不希望它可编辑.当我想发布我只想传回一个苗条的对象只有发布的属性,所以我有另一个对象

  public class PersonUpdater
 {
      public int Age;
      public string FIrst;
      public int JobCategoryId;
 }
Run Code Online (Sandbox Code Playgroud)

这些是我需要传回的唯一属性,所以我的控制器将如下所示:

 public ActionResult Update(PersonUpdater personUpdater)
 {
      _repository.UpdateModel(personUpdater). 
 }
Run Code Online (Sandbox Code Playgroud)

所以,鉴于上述情况,假设强类型辅助方法(如下所示)似乎对方法有用,但如果您引用不同的属性,则可能会导致回发到服务器的问题.

http://weblogs.asp.net/scottgu/archive/2010/01/10/asp-net-mvc-2-strongly-typed-html-helpers.aspx

有什么想法吗?

data-binding asp.net-mvc

6
推荐指数
1
解决办法
742
查看次数

如何处理具有多个聚合根的视图模型?

目前,我的视图模型非常糟糕.

类看起来像这样=>

 public class AccountActionsForm
    {
        public Reader Reader { get; set; }
        //something...
    }
Run Code Online (Sandbox Code Playgroud)

问题是Reader类型来自域模型(违反SRP).

基本上,我正在寻找设计技巧(即将视图模型拆分为输入/输出是一个好主意吗?)如何使我的视图模型无摩擦和开发人员友好(即 - 映射应该使用控制器基类自动工作) ?

我知道AutoMapper框架,我可能会使用它.

那么,再一次 - 在尝试创建正确的视图模型时常见的问题是什么?如何构建它?当需要多域对象输入时如何进行映射?


当视图需要来自多个聚合根的数据时,我感到困惑.我正在创建app,其中包含Library,Reader,BibliographicRecord等实体.

在我的情况下 - 在域级别,将所有这3种类型分组到LibraryReaderThatHasOrderedSomeBooks或什么不是没有意义,但是应该显示特定库中特定读者的有序书籍列表的视图需要它们.

所以-它似乎好创建视图OrderedBooksListOrderedBooksListModel视图模型下保存LibraryOutput,ReaderOutputBibliographicRecordOutput视图模型.甚至更好- OrderedBooksListModel视图模型,它利用平整技术和拥有的道具一样ReaderFirstName,LibraryName等等.

但这会导致映射问题,因为有多个输入.
它不再是1:1关系,我只踢一个聚合根.
这是否意味着我的域模型是错的?

那些纯粹存在于UI层的视图模型字段(即指示已检查选项卡的枚举)呢?

就是是什么每个人都在这样的情况?

 FooBarViewData fbvd = new FooBarViewData();
   fbvd.Foo = new Foo(){ A = "aaa"};
   fbvd.Bar = new Bar(){ B = "bbb"};
   return View(fbvd);
Run Code Online (Sandbox Code Playgroud)

我不愿意这样做=>

var fbvd …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc viewmodel automapper

5
推荐指数
1
解决办法
2725
查看次数

标签 统计

asp.net-mvc ×2

automapper ×1

data-binding ×1

viewmodel ×1