重写控制器操作方法的URL

时间:2010-11-22 19:02:43

标签: asp.net-mvc asp.net-mvc-routing

我有一个名为Person的控制器,它有一个名为NameSearch的post方法。

此方法返回RedirectToAction(“Index”),或View(“SearchResults”)或View(“Details”)。 我获得所有3种可能性的网址是http://mysite.com/Person/NameSearch。 如何更改此选项以将重定向到“{3}}的重定向到”(“索引”),http://mysite.com/Person/Index用于视图(“SearchResults”)和http://mysite.com/Person/SearchResults重写视图(“详细信息”)。

提前致谢

1 个答案:

答案 0 :(得分:1)

我假设您的NameSearch函数评估查询结果并根据以下内容返回这些结果:

  1. 查询有效吗?如果没有,请返回索引。
  2. 结果中是否有0或> 1个人,如果是,则发送到搜索结果
  3. 如果结果中只有1个人,请发送给详细信息。
  4. 所以,你的控制器看起来会更像:

    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}路由处理。

    这会让你朝着正确的方向前进?