ASP.NET MVC 5 ViewModel绑定

哈维

我无法在控制器的ViewModel中绑定从服务获取的数据(事件)。没有ViewModel可以正常工作。

领域模型

namespace Tournament.Model
{
      public class Event
    {
        public int EventID { get; set; }
        public string Name { get; set; }
        public DateTime StartDate { get; set; }
        public DateTime EndDate { get; set; }
        public string Geolocation { get; set; }
        public string Address { get; set; }
        public string City { get; set; }
        public string State { get; set; }
        public string Country { get; set; }
        public string Description { get; set; }
        public string Type { get; set; }

        public virtual List<Team> Teams { get; set; }

    }
}

我只需要几个属性即可:ViewModel

    namespace Tournament.Web.ViewModel.EventViews
    {
        public class EventIndexViewModel
        {
            public int EventIndexViewModelID { get; set; }
            public string Name { get; set; }
            public DateTime StartDate { get; set; }
            public DateTime EndDate { get; set; }
            public string City { get; set; }

        }
    }

现在在控制器中,我有了这个(我省略了服务初始化部分-正常工作)。因此,事件保存事件列表(来自域模型)。

        public ActionResult Index()
        {
            //Create list of Events
            var events = eventService.GetEvents();

            //Search events

            //Add _eventService Event details to var event

            var model = new EventIndexViewModel();
            List<EventIndexViewModel> modelList = new List<EventIndexViewModel>();

            foreach (var Event in events)
            {
                events.Add(new Event {
                    Name = model.Name,
                    StartDate = model.StartDate,
                    EndDate = model.EndDate });
                    modelList.Add(model);
            }           

            return View(modelList);
        }
    }
}

基于ViewModel生成标准列表视图,并得到:

Server Error in '/' Application.

Collection was modified; enumeration operation may not execute.

Source Error: 


Line 36:             List<EventIndexViewModel> modelList = new List<EventIndexViewModel>();
Line 37: 
**Line 38:             foreach (var Event in events)**
Line 39:             {
Line 40:                 events.Add(new Event {

UPDATE -SOLUTION:现在正在工作的控制器:

 public ActionResult Index()
        {
            //Create list of Events
            var domainEvents = eventService.GetEvents();


            //Add domain Events to ViewModel Event properties

            var eventViewModel = new EventIndexViewModel();
            List<EventIndexViewModel> eventListViewModel = new List<EventIndexViewModel>();

            foreach (var domainEvent in domainEvents)
            {
                eventListViewModel.Add(new EventIndexViewModel
                {    
                    Name = domainEvent.Name,
                    StartDate = domainEvent.StartDate,
                    EndDate = domainEvent.EndDate });
                }           

            return View(eventListViewModel);
        }

更新2-更短,我猜想用LINQ更好的方法

public ActionResult Index()
        {
            //Create list of Events
            var domainEvents = eventService.GetEvents();

            //Search events

            //Add domain Event list to ViewModel list

                var eventListViewModel = domainEvents.Select(
                    x => new EventIndexViewModel()
                    {
                        Name = x.Name,
                        StartDate = x.StartDate,
                        EndDate = x.EndDate,
                        City = x.City

                    })
                        .ToList();

            return View(eventListViewModel);
        }
大卫

您正在向自身添加一个集合:

foreach (var Event in events)
{
    events.Add(new Event {
    //...

因此,对于每个event您想要添加一个event也许您是想向其中添加元素modelList

foreach (var Event in events)
{
    modelList.Add(new EventIndexViewModel {
    //...

(旁注:更清晰的命名策略将帮助您更轻松地发现问题。modelList并不能真正告诉您问题的所在。您可能正在使用events变量,因为从语义上讲,您应该处理事件。也许可以调用它们domainEventsviewEvents同样,命名一个Event类型Event变量的变量只是在问问题。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使 ajax 下拉列表与 ASP.Net MVC 5 中的 ViewModel 强绑定

Asp.Net MVC-模型绑定到模型或ViewModel

在ASP.NET MVC中没有SelectList的ViewModel绑定

ASP.NET 5 / MVC 6中基于约定的绑定

ASP.NET Core [FromBody]与MVC 5绑定

ASP.NET MVC 5模型绑定列表为空

ASP.Net Core MVC - 复杂的 ViewModel 未将属性与对象列表绑定

ASP.NET MVC将DropDownList和Checkbox绑定到ViewModel

如何在ASP.NET-MVC中将匿名类型绑定到viewModel

将ASP.NET MVC 5绑定“版本”迁移到MVC 6

使用URL绑定来自Web服务的数据并将其与类绑定-ASP.NET MVC 5

ViewModel在asp.net mvc 5中发回空集合

从ASP.Net MVC5中的两个EF模型创建ViewModel

可以使用asp.net mvc-5 中的ViewModel 登录吗?

带有ViewModel的ASP.NET MVC5控制器CRUD(2个模型)

谁在ASP MVC 5中填充ViewModel

Asp.net MVC从FormCollection填充viewModel

2 ASP.NET MVC中的ViewModel

asp net mvc发布给出空的viewmodel

ASP.NET MVC5:要使用模型绑定更新Collection中的几个项目

在ASP.NET MVC5中绑定@ Html.DropDownListFor的最佳方法是什么?

Asp.Net MVC 5绑定参数完全来自正文

将异步方法绑定到DropDownList ASP.NET MVC 5

如何在ASP.NET MVC 5中将IAuthenticationManager与Ninject绑定?

ASP.NET MVC 5-JSON-(动态?)模型绑定-REST服务-Webhooks-Chargebee

如何从ASP.NET MVC5中的JSON绑定模型中的属性

ASP.NET MVC 5-模型绑定不起作用

ASP.NET MVC 5无法在视图上绑定单选按钮列表

复选框始终绑定为false,即使选中了asp.net mvc 5