Как я могу перейти на другой вид для создания сущностей - PullRequest
0 голосов
/ 12 июля 2010

Я новичок в asp.net MVC и должен решить, как мне реализовать следующее. Кто-нибудь, пожалуйста, укажите мне в правильном направлении

У меня есть контроллер, который служит для создания клиентов, и все работает нормально

У меня есть другой контроллер, который служит vew для создания счетов. Но для создания счета-фактуры мне нужно будет найти клиентов, которые работают нормально. Если я не могу найти клиента, мне нужно будет открыть представление «Создание клиента», создать клиента и затем вернуться к созданию моего счета.

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

Эти контроллеры / представления живут в разных областях

Ответы [ 2 ]

0 голосов
/ 12 июля 2010

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

Затем вы можете перенаправить пользователя с помощью следующего (обратите внимание, я включил URL-адрес возврата и имя клиента), ваш контроллер клиента может принять эти параметры и предварительно заполнить поле имени, а также перенаправить назад:

RedirectToAction("Create", "Customer", new { returnUrl = "YourUrl", NewCustomerName = "NewCustNameHere" }

Если вы хотите сделать это автоматически, я бы сделал это способом, предложенным RPM.

0 голосов
/ 12 июля 2010

Помните, что контроллеры обслуживают определенные запросы (получить клиента, просмотреть клиента, создать счет).

В вашем случае вам не нужно «получать контроллер клиента для создания клиента».

Просто создайте обычный метод, который называется, например, «GetCustomer». Это можно вызвать с нескольких контроллеров. Этот метод может жить где угодно - возможно, в сборке помощников в пространстве имен вашей модели (при условии, что ваша Модель находится в отдельной библиотеке классов, что я и делаю). Просто позвоните по этому поводу вашему контроллеру счетов.

Вы не хотите двигаться вперед и назад от контроллеров - это противоречит принципу MVC.

должно быть

URL Request -> Controller -> Model -> Controller -> View.

не

URL Request -> Controller -> Controller -> Model -> Controller -> View.

Вот что я имею в виду.

Контролер клиентов:

public ActionResult Index(int customerId)
{
   var customer = Model.GetCustomerById(customerId);
   return View(customer);
}

Контроллер счетов:

public ActionResult GetInvoice(int customerId)
{
   var customer = Model.GetCustomerById(customerId);
   return View("Invoice", customer);
}

Модель:

public Customer GetCustomerById(int customerId)
{
    var customer = yourDatabaseRepository.GetCustomerById(customerId);
}

Знаешь, что я имею в виду? Ключ заключается в том, чтобы не помещать логику «GetCustomer» в контроллер - абстрагировать ее в модель - доступную для всех контроллеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...