Мне просто интересно, где, в MVC, ответственность за определение места перенаправления принадлежит. I думаю это контроллер, но я не уверен.Условное перенаправление в контроллере?
В действии Создать WorkshopItem
Я создаю новый WorkshopItem из переданного ViewModel, а затем сохраняю его в базе данных. Часть ViewModel - это SelectedCustomerId
и CustomerName
, если SelectedCustomerId пуст и имя пусто. Я получаю объект default customer
и свяжу его с элементом. Если идентификатор пуст, но имя не указано, пользователь выполнил поиск клиента, но совпадений не найдено, поэтому я беру значение и создаю новую запись клиента и присоединяю ее.
[NHibernateActionFilter]
[HttpPost]
public ActionResult Create(WorkshopItemCreateViewModel model)
{
try
{
Customer customer = null;
if (model.SelectedCustomerId == new Guid() &&
!string.IsNullOrWhiteSpace(model.CustomerName))
customer = CreateNewCustomer(model.CustomerName);
else if (model.SelectedCustomerId == new Guid() &&
string.IsNullOrWhiteSpace(model.CustomerName))
{
// Assign the System Valued customer if no customer was selected.
var id = Guid.Parse(ConfigurationManager.AppSettings["ValuedCustomerId"]);
customer = Session.QueryOver<Customer>()
.Where(c => c.Id == id)
.SingleOrDefault();
}
// other stuff
return RedirectToAction("Index");
Это работает хорошо, но теперь я хочу также RedirectToAction
в зависимости от того, была ли создана запись клиента или нет, потому что если был создан клиент имеет Name
только, и я хотел бы перенаправить на Edit действие на клиентском контроллере, передающее CustomerId (что, я думаю, я могу сделать). Мой вопрос действительно в том, действительно ли это делается в MVC или это должно быть ответственным в другом месте?
Это будет выглядеть следующим образом:
[NHibernateActionFilter]
[HttpPost]
public ActionResult Create(WorkshopItemCreateViewModel model)
{
try
{
Customer customer = null;
bool newCustomer = false;
if (model.SelectedCustomerId == new Guid() &&
!string.IsNullOrWhiteSpace(model.CustomerName))
{
customer = CreateNewCustomer(model.CustomerName);
newCustomer = true;
}
else if (model.SelectedCustomerId == new Guid() &&
string.IsNullOrWhiteSpace(model.CustomerName))
{
// Assign the System Valued customer if no customer was selected.
var id = Guid.Parse(ConfigurationManager.AppSettings["ValuedCustomerId"]);
customer = Session.QueryOver<Customer>()
.Where(c => c.Id == id)
.SingleOrDefault();
}
// other stuff
if (newCustomer)
return RedirectToAction("Edit", "Customer", new {id=customer.Id});
else
return RedirectToAction("Index");