我首先使用 MVC 4、EF 5 代码,我的服务层仅与域类 (POCO) 交互,而我的 UI 层与 ViewModel 类 (POCO) 交互。
我的问题:
我如何从 UI 中指定必填字段并仅从服务层的数据库中获取这些字段?
我首先使用 MVC 4、EF 5 代码,我的服务层仅与域类 (POCO) 交互,而我的 UI 层与 ViewModel 类 (POCO) 交互。
我的问题:
我如何从 UI 中指定必填字段并仅从服务层的数据库中获取这些字段?
动态构建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
是一个类似字典的结构,您可以从中选择要显示的值。
这是 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);
}