Переписать URL для метода действия контроллеров - PullRequest
1 голос
/ 22 ноября 2010

У меня есть контроллер с именем Person, и у него есть метод post с именем NameSearch.

Этот метод возвращает RedirectToAction ("Index") или View ("SearchResults") или View ("Details").URL, который я получаю для всех 3 возможностей: http://mysite.com/Person/NameSearch. Как бы изменить это, чтобы переписать URL-адреса на http://mysite.com/Person/Index для RedirectToAction ("Index"), http://mysite.com/Person/SearchResults для View ("SearchResults") и http://mysite.com/Person/Details для просмотра (" Подробности ").

Заранее спасибо

1 Ответ

1 голос
/ 22 ноября 2010

Я предполагаю, что ваша NameSearch функция оценивает результат запроса и возвращает эти результаты на основе:

  1. Является ли запрос действительным? Если нет, вернитесь к индексу.
  2. Есть ли в результате 0 или> 1 человек, если так, отправьте в Результаты поиска
  3. Если в результате ровно 1 человек, отправьте в Details.

Итак, более менее ваш контроллер будет выглядеть так:

public class PersonController
{
  public ActionResult NameSearch(string name)
  {
    // Manage query?
    if (string.IsNullOrEmpty(name))
      return RedirectToAction("Index");

    var result = GetResult(name);
    var person = result.SingleOrDefault();
    if (person == null)
      return RedirectToAction("SearchResults", new { name });

    return RedirectToAction("Details", new { id = person.Id });
  }

  public ActionResult SearchResults(string name)
  {
    var model = // Create model...

    return View(model);
  }

  public ActionResult Details(int id)
  {
    var model= // Create model...

    return View(model);
  }
}

Итак, вам, вероятно, потребуется определить маршруты так:

routes.MapRoute(
  "SearchResults",
  "Person/SearchResults/{name}",
  new { controller = "Person", action = "SearchResults" });

routes.MapRoute(
  "Details",
  "Person/Details/{id}",
  new { controller = "Person", action = "Details" });

Результат действия Index будет обработан по умолчанию {controller}/{action}/{id} route.

Что подтолкнуло вас в правильном направлении?

...