2016-05-04 3 views
0

У меня есть Образцовый клиентОтображать/отображать данные из другой модели (ViewModel)?

public class Customer 
    { 
     public int CustomerID { get; set; } 
     public string CustomerName { get; set; } 
     public string CustomerAddress1 { get; set; } 
     public string CustomerAddress2 { get; set; } 
     public string CustomerAddress3 { get; set; } 
     public string CustomerAddress4 { get; set; } 
     public string CustomerAddress5 { get; set; } 
     public string CustomerAddress6 { get; set; } 
     public string CustomerAddress7 { get; set; } 
} 

Я хочу, чтобы отобразить всю информацию от всех клиентов в виде профиля. Я предполагаю, что лучше всего использовать viewmodel, потому что я также хочу показать другую информацию в профиле.

Я создал ViewModel

public class CustomerViewModel 
    { 
     public string CustomerAddress1 { get; set; } 
     public string CustomerAddress2 { get; set; } 
     public string CustomerAddress3 { get; set; } 
    } 

Я не знаю, как мой контроллер профиль должен выглядеть и протестировали

 CustomerViewModel ViewModel = new CustomerViewModel(); 

     return View(ViewModel); 

ViewModel является нулевым.

Обычно, если я хочу получить всех клиентов, но в клиентском контроллере, мне это нравится.

var customer = db.Customers.ToList(); 
return customer 

И как я должен перечислять всех клиентов в виде профиля?

Это не работает

@model xxx.ViewModels.CustomerViewModel 

@foreach (var item in Model) 
{ 
    item.Customer.CustomerAddress2 
} 
+1

'var model = db.Customers.Select (x => новый CustomerViewModel {CustomerAddress1 = x.CustomerAddress1 и т. Д.});' –

ответ

1

Вы хотите перечислить несколько ViewModels, таким образом, создать коллекцию:

var allCustomers = db.Customers.ToList(); 

Затем карта, которая к вашему ViewModel:

var allCustomersProfiles = allCustomers.Select(c => new CustomerViewModel 
{ 
    CustomerAddress1 = c.CustomerAddress1, 
    CustomerAddress2 = c.CustomerAddress2, 
    CustomerAddress3 = c.CustomerAddress3, 
}).ToList(); 

Вы можете упростите это, непосредственно проецируя на свою модель просмотра, вызывая создание оптимального SQL и только один o ▪ Таблица в ряд, чтобы быть создан вместо двух:

var allCustomersProfiles = db.Customers.Select(c => new CustomerViewModel 
{ 
    // ... 
}.ToList() 

Тогда скажите ваш взгляд ожидать перечислимую модели (вы собираетесь пройти List<T> но IEnumerable<T> работает так же хорошо):

@model IEnumerable<xxx.ViewModels.CustomerViewModel> 

@foreach (var item in Model) 
{ 
    item.Customer.CustomerAddress2 
} 

И вернуть коллекцию на ваш взгляд:

return View(allCustomersProfiles); 
0

Я могу думать 2 способов сделать это, а именно:

  • Вернуть список просмотра клиентов моделей, содержащих только данные клиента, связанные с
  • Возврат вид клиента модель со списком клиентов и любых несвязанных данных клиента

Что касается моего первого варианта, вы можете верните список моделей просмотра клиентов в представление.Это будет содержать только данные о клиентах, связанные, ничего больше:

public class CustomerViewModel 
{ 
    public int Id { get; set; } 

    public string Name { get; set; } 

    public string AddressLine1 { get; set; } 

    public string AddressLine2 { get; set; } 

    public string AddressLine3 { get; set; } 

    // Add more customer-related properties if needed 
} 

В методе действия вашего контроллера вы будете извлекать свой список клиентов, проходной каждый клиент и заполнить элемент вида модели для каждого клиента и добавить его клиентом просмотреть список моделей:

public class CustomerController : Controller 
{ 
    private ICustomerRepository customerRepository; 

    public CustomerController(ICustomerRepository customerRepository) 
    { 
      this.customerRepository = customerRepository; 
    } 

    public ActionResult Profile() 
    { 
      List<CustomerViewModel> customerViewModels = new List<CustomerViewModel>(); 
      List<Customer> customers = customerRepository.GetAll(); 
      foreach (Customer customer in customers) 
      { 
       CustomerViewModel customerViewModel = new CustomerViewModel(); 
       customerViewModel.Id = customer.Id; 
       customerViewModel.Name = customer.Name; 
       // Populate the rest of the properties 

       customerViewModels.Add(customerViewModel); 
      } 

      return View(customerViewModels); 
    } 
} 

После заполнения списка моделей просмотра клиентов вы отправляете этот список в представление. Вид получит строго типизированные список просмотра клиентов моделей:

@model List<YourProject.ViewModels.CustomerViewModel> 

@foreach (var customerViewModel in Model) 
{ 
    <p>@customerViewModel.Id - @customerViewModel.Name</p> 
} 

второй вариант, чтобы вернуть модель представления клиента к просмотру, содержащей список клиентов, а также любые другие данные, которые вы хотите использовать в Ваше мнение. Давайте предположим, что вы хотите отобразить информацию магазина, а также список клиентов, для этого магазина:

public class CustomerViewModel 
{ 
    public CustomerViewModel() 
    { 
      Customers = new List<Customer>(); 
    } 

    public List<Customer> Customers { get; set; } 

    public string StoreName { get; set; } 
} 

В вашем методе действия контроллера вы бы заселить список клиентов и хранения информации:

public ActionResult Profile() 
{ 
    CustomerViewModel customerViewModel = new CustomerViewModel(); 
    customerViewModel.Customers = customerRepository.GetAll(); 
    customerViewModel.StoreName = "Test Store Name"; 

    return View(customerViewModel); 
} 

Когда список клиентов и хранить информацию населена затем отправить эту модель представления клиента к виду:

@model YourProject.ViewModels.CustomerViewModel 

<div>@Model.StoreName</div> 
@foreach (var customer in Model.Cutomers) 
{ 
    <p>@customer.Id - @customer.Name</p> 
} 

Я надеюсь, что это помогает.

Смежные вопросы