小编Dr.*_*ite的帖子

使用ViewModels设计MVC存储库

我想创建一个存储库类来将我的数据逻辑与控制器分开.我使用ViewModel来表示将填充来自不同表的数据的一些数据.

以下是我的一些问题:

  1. 对于像GetAll()这样的方法,我会返回一个IQueryable<MyViewModel>IQueryable<Entity>?如果我返回视图模型,我该如何应对GetAll()拉动数千条记录?
  2. 我是否为自定义ViewModel类创建构造函数,该类将实体作为参数来进行映射?(我仍然不熟悉automapper,所以只需要从设计的角度理解如何做到这一点)

同样,我主要担心的是一种GetAll()可以提取许多记录的方法.如果我做了一个foreach循环来将每个实体转换为一个ViewModel似乎需要很多开销.我的想法是将自定义ViewModel类中的引用放入IQueryable<Entity>要从集合访问的内容,并让ListViewModel只有索引器或类似引用集合属性的引用.

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

7
推荐指数
1
解决办法
5638
查看次数

麻烦绑定到MVC3中的列表

我一直在尝试将视图绑定到对象列表,如此处所述模型绑定到列表

我的问题是当列表通过POST返回时,列表包含我最初发送的正确数量的元素,但对象中的值将返回,就好像它们从未设置过一样.不确定我错过了什么使模型绑定器正确解析.

这是我的测试代码:

我的模型是:

IList<Test>
Run Code Online (Sandbox Code Playgroud)

其中Test定义为:

public class Test
{
    public int x;
}
Run Code Online (Sandbox Code Playgroud)

在我的TestController中,我使用的方法是"Create",它有一个回发:

public ActionResult Create()
    {

        List<Models.Test> testList = new List<Models.Test>() {
            new Models.Test() { x = 5 }
        };

        return View(testList);
    }

    //
    // POST: /Test/Create

    [HttpPost]
    public ActionResult Create(IList<Models.Test> tests)//Models.TestContainer tc)
    {
        return View(tests);
    }
Run Code Online (Sandbox Code Playgroud)

和"创建"视图的代码:

@model IList<ksg.Models.Test>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)

<fieldset>
    <legend>TestContainer</legend>
       @Html.EditorFor(x => x[0])
    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>
}
Run Code Online (Sandbox Code Playgroud)

最后,我的Test类的编辑器模板:

@model ksg.Models.Test
@using ksg.Helpers
<div>
@Html.TextBoxFor(x => x.x) …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc binding list

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