Проблема передачи данных из репозитория в viewmodel - PullRequest
1 голос
/ 03 августа 2011

У меня есть следующая модель представления,

public class SiteAdminCreateViewModel
{
    public Customer Customer { get; private set; }
    public CustomerSite CustomerSite { get; private set; }
    public SelectList CustomerNames { get; private set; }

    public SiteAdminCreateViewModel(CustomerSite customerSite, Customer customer)
    {
        CustomerSite = customerSite;
        Customer = customer;
        CustomerNames = new SelectList(customer.CustomerName);
    }
}

И следующие методы в моем хранилище для возврата списка клиентов и списка CustomerSites

 public IQueryable<CustomerSite> GetCustomerSites
    {
        get { return context.CustomerSites; }
    }
    public IQueryable<Customer> GetCustomers
    {
        get { return context.Customers; }
    }

Когда я создаю модель представленияв моем контроллере я хочу вернуть список клиентов в список выбора в viewmodel.

 public ViewResult Create() 
    {
        CustomerSite customerSite = new CustomerSite();
        var customer = repository.GetCustomers.ToList();
        return View(new SiteAdminCreateViewModel(customerSite, customer));       
    }

Но в обратной строке выдается ошибка

не может преобразовать из System.Collections.Generic.List 'в' CustomerOrders.Domain.Entities.Customer

Я думаю,это потому, что у меня есть переменная customer, определенная в Viewmodel типа Customer, но я пытаюсь передать список клиентов?

Может кто-нибудь предложить какой-либо совет, где я иду не так?

Нужно ли мне определять тип клиента и тип списка выбора CustomerNames в viewmodel, я определил объект Customer только для того, чтобы я мог использовать его для передачи клиентов в список выбора, но я не уверен, что это лучший способ сделатьэто?

Любой совет, который кто-нибудь может предложить новичку, будет высоко оценен.

Ответы [ 2 ]

1 голос
/ 03 августа 2011

Ваш SiteAdminCreateViewModel класс 'конструктор определен следующим образом:

public SiteAdminCreateViewModel(CustomerSite customerSite, Customer customer) {
   ...
}

Второй аргумент имеет тип Customer.

Вы передаете ему var customer = repository.GetCustomers.ToList(),чей тип List<Customer>.


Когда я создаю модель представления в моем контроллере, я хочу вернуть список клиентов для отправки в список выбора в модели представления.

Если я правильно понимаю, что вы говорите, вы просто пытаетесь передать список клиентов, чтобы создать SelectList.

Прежде всего, вы, похоже, передаете строкуSelectList конструктор.Это даже не скомпилируется (читайте System.Web.Mvc.SelectList ).

Что вам нужно сделать, это изменить конструктор SiteAdminCreateViewModel как

public SiteAdminCreateViewModel(CustomerSite customerSite, IEnumerable<Customer> customers) {
   /* ... */
   CustomerNames = new SelectList(customers, "CustomerId", "CustomerName");
}

CustomerId и CustomerName являются свойствами класса Customer.

0 голосов
/ 03 августа 2011

это просто потому, что вы пытаетесь передать IList в конструктор SiteAdminCreateViewModel

var customer = repository.GetCustomers.ToList();
        return View(new SiteAdminCreateViewModel(customerSite, customer));

, используя

var customer = repository.GetCustomers.ToList().FirstOrDefault();
            return View(new SiteAdminCreateViewModel(customerSite, customer));

, также может потребоваться проверить, является ли клиент нулевым

...