从UI指定必填字段,仅从数据库中获取这些字段

时间:2013-01-28 08:02:13

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

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

我的问题:

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

2 个答案:

答案 0 :(得分: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是一个类似字典的结构,您可以从中选择要显示的值。

答案 1 :(得分:0)

This是MVC的练习。 更好的是使用viewmodel 您可以使用viewmodel和requird list.for示例这是视图模型,您应该将此模型传递给视图

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

enter image description here