【问题标题】:Specify Required field from UI and fetch ONLY these fields from Database从 UI 中指定必填字段并仅从数据库中获取这些字段
【发布时间】:2013-01-28 08:02:13
【问题描述】:

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

我的问题:

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

【问题讨论】:

    标签: asp.net-mvc entity-framework asp.net-mvc-4 ef-code-first


    【解决方案1】:

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

    您可以使用Entity Sql 构建查询字符串。

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

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

    【讨论】:

    • @user197508 这是有道理还是我没有很好地理解你的问题?
    【解决方案2】:

    This 是 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);
    }
    

    【讨论】:

      猜你喜欢
      • 2015-10-23
      • 1970-01-01
      • 1970-01-01
      • 2011-02-06
      • 2017-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多