1

我首先使用 MVC 4、EF 5 代码,我的服务层仅与域类 (POCO) 交互,而我的 UI 层与 ViewModel 类 (POCO) 交互。

我的问题:

我如何从 UI 中指定必填字段并仅从服务层的数据库中获取这些字段?

4

2 回答 2

1

动态构建Select表达式并不容易,因为在编译时不知道捕获结果的类型(命名或匿名)。我在 StackOverflow 上看到了一些努力,但如果我没记错的话,它们是徒劳的(我现在找不到它们)。

您可以做的是使用Entity Sql来构建查询字符串。

var queryString = string.Format("SELECT {0} FROM MyTable"
                               , string.Join(",",fieldsFromUi); // WHERE...?
var q = new ObjectQuery<DbDataRecord>(queryString , context);

哪里context是一个ObjectContext实例。DbDataRecord是一个类似字典的结构,您可以从中选择要显示的值。

于 2013-01-28T09:23:09.007 回答
0

是 MVC 的最佳实践。更好的是使用视图模型您可以使用视图模型和要求列表。例如,这是视图模型,您应该将此模型传递给查看

public class LoginPageVM
{
    [Required(ErrorMessage = "Are you really trying to login without entering username?")]
    [DisplayName("Username/e-mail")]
    public string UserName { get; set; }
    [Required(ErrorMessage = "Please enter password:)")]
    [DisplayName("Password")]
    public string Password { get; set; }
    [DisplayName("Stay logged in when browser is closed")]
    public bool RememberMe { get; set; }
}

在视野中

@model CamelTrap.Models.ViewModels.LoginPageVM

@using (Html.BeginForm()) {
    @Html.EditorFor(m => m);
    <input type="submit" value="Save" class="submit" />
}

并在控制器中

[HttpGet]
public ActionResult LoginPage()
{
    return View();
}

[HttpPost]
public ActionResult LoginPage(LoginPageVM model)
{
    ...code to login user to application...
    return View(model);
}

在此处输入图像描述

于 2013-01-28T09:00:15.007 回答