2013-07-12 89 views
1

我想知道是否有可能在鏈接中有多個操作。例如,如果我想有多個環節,如:設置多個操作

http://www.mywebsite.com/(CONTROLLER)/(ID)/(ACTION)

[HTTP://] www.mywebsite.com/user/Micheal/EditMovies [HTTP://] www.mywebsite。 com/user/Micheal/Edit收藏

有沒有某種方式可以做到這一點?如果沒有,我是否必須在函數中指定多個ID,然後使用大小寫來確定它們將被髮送到哪個頁面?

在我UserController.cs我:

public ActionResult Index(string username) 
    { 
     if (username != null) 
     { 
      try 
      { 
       var userid = (Membership.GetUser(username, false).ProviderUserKey); 
       Users user = entity.User.Find(userid); 
       return View(user); 
      } 
      catch (Exception e) 
      { 

      } 
     } 
     return RedirectToAction("", "Home"); 
    } 

在我的路線,我有:

routes.MapRoute(
      name: "User", 
      url: "User/{username}", 
      defaults: new { controller = "User", action = "Index" } 
     ); 

我試圖讓它做的是對第二個動作的附加功能,所以我可以做這樣的事:

User/{username}/{actionsAdditional} 

而在我的UserController我可以把更多的行動,將領導actionsAdditional

public ActionResult Index(string username) 
    { 
     if (username != null) 
     { 
      try 
      { 
       var userid = (Membership.GetUser(username, false).ProviderUserKey); 
       Users user = entity.User.Find(userid); 
       return View(user); 
      } 
      catch (Exception e) 
      { 

      } 
     } 
     return RedirectToAction("", "Home"); 
    } 

public ActionResult EditFavorites() 
    { 

// DoStuff }

回答

0

第二個動作你可以這樣做多種方式,這裏只有一個:

設置來處理這個路線:

routes.MapRoute("UserEditsThings", 
    "user/{id}/edit/{thingToEdit}", 
    new { controller = "UserController", action="Edit" }, 
    new { thingToEdit = ValidThingsToEditConstraint() } 
); 

那麼您在User控制器中的動作應該如下所示:

public ActionResult Edit(ThingToEdit thingToEdit) { 
    ThingToEditViewModel viewModel = new ThingToEditViewModel(thingToEdit); 
    return View(viewModel); 
} 

RouteConstraint是什麼會採取自己的輸入(thingToEdit),並確保它是有效的(你可以在幾個地方做到這一點 - 在自定義模型綁定器等):現在

public class ValidThingsToEditConstraint : IRouteConstraint 
{ 
    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) 
    { 
     //simplistic implementation simply to show what's possible. 
     return values['thingToEdit'] == "Favorites" || values['thingToEdit'] == "Movies"; 

    } 
} 

,即方式,你可以有一種方法來編輯電影和收藏夾,你只需添加一個參數來顯示他們正在編輯的東西的類型。

如果你想保持當前的路線,你應該能夠做到以下幾點:

routes.MapRoute("UserEditsThings", 
    "user/{id}/edit{thingToEdit}", 
    new { controller = "UserController", action="Edit" }, 
    new { thingToEdit = ValidThingsToEditConstraint() } 
); 

我已經遠離ASP.NET MVC約7個月,所以這可能是一個小生鏽。它沒有經過語法錯誤測試,python的某些部分可能會發光。它應該讓你在那裏,但。

+0

我試圖讓這個工作,但couldnt。讓我試着指定我想要做的事情。我試圖讓它在哪裏首先有一個用戶控制器,並接受一個用戶名的id和行動被設置爲/ Index /作爲路由配置中的默認值,以擺脫鏈接。我想把它放在他們可以去的地方/ User/Micheal/Edit/Favoites,我可以在UserController中製作一個收藏夾ActionResult,以及一個帶有字符串用戶名的Index actionresult。 –

+0

你最好的選擇是編輯你有的路線和你想要的控制器設置到你的問題中。我不得不說,我不懂散文,但如果你發佈它,可能會理解代碼。 –