0

すべての顧客のリストを表示でき、すべての注文のリストを表示できます。これをさらに進めたいと思います。

同じページに2つの部分的なビューを表示して、顧客の詳細とその顧客に関連する注文を表示したいと思います。

 <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage< MyDemo.Models.CustomerAndOrdersViewModel >" %>

<% Html.RenderPartial("CustomerDetails", this.ViewData.Model.Customer); %>
<% Html.RenderPartial("CustomerOrders", this.ViewData.Model.Order); %>

ビューモデルを作成しました

public class CustomerAndOrdersViewModel
{
    public CustomerAndOrdersViewModel(Customer customer,
                        IEnumerable<Order> orders)
    {
        this.Customer = customer;
        this.Order = orders;
    }

    public Customer Customer { get; set; }
    public IEnumerable<Order> Order { get; set; }
}

そして、私のカスタマーコントローラーで私は定義しました

    ICustomerRepository customerRepository;
    IOrderRepository orderRepository;

    public CustomersController()
        : this(new CustomerRepository())
    {
    }

    public CustomersController(ICustomerRepository repository)
    {
        customerRepository = repository;
    }

    public CustomersController(IOrderRepository repository)
    {
        orderRepository = repository;
    }

次に、CustomerAndOrdersViewModelを詳細ビューに渡そうとします

    public ActionResult Details(int id)
    {

        QuestionAndOrderViewModel viewdata = new CustomerAndOrdersViewModel(customerRepository.GetCustomer(id),
                                        orderRepository.FindAllOrders());
        return View(viewdata);
    }

しかし、orderRepositoryに対して「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが表示されます。

どこが間違っているのですか?

4

3 に答える 3

5

コントローラのコンストラクタはそれぞれ1つの引数のみを取り、同じインスタンスで両方の値を使用しようとしています。

たとえば、次のようにすることができます。

ICustomerRepository customerRepository;
IOrderRepository orderRepository;

public CustomersController()
    : this(new CustomerRepository(), new OrderRepository())
{
}

public CustomersController(
    ICustomerRepository customerRepository, 
    IOrderRepository orderRepository)
{
    this.customerRepository = customerRepository;
    this.orderRepository = orderRepository;
}
于 2009-10-09T14:49:03.890 に答える
1

さて、コントローラーファクトリーはデフォルトコントローラーを呼び出すので、このコンストラクターは次のように呼び出されます。

public CustomersController() : this(new CustomerRepository())
{
}

ロールリポジトリではなく、CustomerRepositoryオブジェクトのみを渡していることに注意してください。したがって、コードを次のように変更します。

ICustomerRepository customerRepository;
IOrderRepository orderRepository;

public CustomersController() : this(new CustomerRepository(), new OrderRepository())
{}

public CustomersController(ICustomerRepository customerRepository, IOrderRepository orderRepository)
{
  this.customerRepository = customerRepository;
  this.orderRepository = orderRepository;
}
于 2009-10-09T14:51:27.847 に答える
0

部分ビューでエラーが発生しているため、コントローラー内のすべてのコードは無関係です。モデルに正確に含まれているものを確認する必要があります。また、適切なモデルを部分ビューに渡しているかどうかを確認する必要があります。デバッグしてRenderPartial呼び出しで中断し、モデルを調べて、部分ビューを確認し、正しい値を渡しているかどうかを確認します。

于 2009-10-09T14:48:31.117 に答える