【问题标题】:Viewmodel Data BindingViewmodel 数据绑定
【发布时间】:2015-06-10 17:02:02
【问题描述】:

玩弄视图模型来尝试理解它,因为我们在项目进行到一半时了解到使用实体框架模型显示数据不是我们应该这样做的方式,所以我们'正在尝试以正确的方式学习,或者我认为无论如何都是。

我在数据库中有一个名为 Users 的表,并创建了一个 ADO.net 实体数据模型,我现在简称为“MainModel”,然后创建了一个名为“MainViewModel”的新类文件。

在此视图模型中,我从 MainModel 中的 User 表中获取了属性,我们希望将其显示在表的视图中以显示每个数据库条目。 MainViewModel 代码如下:

    namespace WebApplication9.Models
{
    public class MainViewModel
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
        public string Company { get; set; }
    }
}

然后我有一个名为 MainController 的控制器,它有一个 Index 的 ActionResult,如下所示:

public ActionResult Index(MainViewModel viewModel)
        {                       
            var users = new User()
            {
                FirstName = viewModel.FirstName,
                LastName = viewModel.LastName,
                EMail = viewModel.Email,
                Company = viewModel.Company,
            };

            List<MainViewModel> viewModelList = new List<MainViewModel>();

            return View(viewModelList);
        }

到目前为止,我不知道下一步该去哪里,不幸的是,我读到的所有内容都让我更加困惑。它确实显示了一个表格,其中包含 FirstName、LastName、Email 和 Company 表格标题,但它不在视图中显示任何数据。

任何帮助都将不胜感激,因为我们迫切希望重新开始:)

谢谢

【问题讨论】:

    标签: c# asp.net-mvc entity-framework


    【解决方案1】:

    假设这是您的 HttpGet 操作(虽然不确定为什么它将您的 viewModel 作为参数?),您实际上并没有用任何东西填充您的列表,您将不得不从数据库中获取它并且然后将其转换为准备显示的视图模型,例如:

     public ActionResult Index(MainViewModel viewModel)
        {                       
            var users = context.Users.ToList(); //use your dbContext
    
            List<MainViewModel> viewModelList = users
                .Select(u => new MainViewModel
                {
                    FirstName = u.FirstName,
                    LastName = u.LastName,
                    Email = u.Email,
                    Company = u.Company
                }).ToList();
    
            return View(viewModelList);
        }
    

    【讨论】:

    • 感谢@Matty - 我可能有点昏暗,但我找不到我的 DbContext 叫什么。浏览过 MainModel.edmx 之类的东西,但找不到。有什么想法可以检查它的名称吗?
    • @SouthWilts 没有问题,在你的代码中搜索DbContext,你会发现一个继承自它的类,类似于public partial class YourContext : DbContext,它将由EF自动生成。
    • 我能找到的最接近的是: public partial class SWGS_DashboardEntities : DbContext { public SWGS_DashboardEntities() : base("name=SWGS_DashboardEntities") { } 但是当使用 SWGS_DashboardEntities 时,我们只得到 .Equals 和 .ReferenceEquals .
    • @SouthWilts 你需要创建它的一个instancevar context = new SWGS_DashboardEntities();
    • 现在正在这样做,但收到一条错误消息,提示“webapplication9.models.swgs_dashboardentities.swgs_dashboardentities() 和 webapplication9.models.swgs_dashboardentities.swgs_dashboardentities() 之间的调用不明确 - 有什么想法吗?var TheContext = 新的 SWGS_DashboardEntities();
    猜你喜欢
    • 2023-03-15
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 2011-10-12
    • 2015-06-08
    相关资源
    最近更新 更多