2014-02-21 47 views
0

請原諒我,如果您覺得這個問題有點愚蠢。但我對MVC相當陌生。如何將2個參數傳遞給控制器​​MVC中的動作

據我所知,這些動作是設計爲無狀態的。 因此,客戶端應將對象的ID傳遞給Actions,我們將使用存儲庫(EF)來查找對象並執行我們喜歡的操作。我的問題是,對象和藝術家之間存在多對多的關係。

當我在一個對象的編輯頁面上時,我想在彈出菜單中找到Artist並將Artist添加到正在編輯的對象中。因此,我已經創造了一個ObjectController行動AddArtistToObject如下

public ActionResult AddArtistToObject(int ObjectID, int ArtistID){ 
    //code goes here 
    } 

所以,在彈出菜單中打開了,有一個搜索區域搜索藝術家。你會得到藝術家匹配的列表。然後每一行都有一個選擇按鈕。選擇按鈕href包含ArtistID。

我認爲我需要在URL中附加ObjectID。

的URL變得像:http://domain.com/Object/AddArtistToObject/ArtistID 和使用jquery我得到的objectID也附上對象ID在URL中作出這樣http://domain.com/Object/AddArtistToObject/ArtistID/ObjectID

的URL因此,例如實際的URL變得 http://domain.com/Object/AddArtistToObject/54/43

你不覺得這個URL也很混亂嗎?會不會更好,如果我可以通過使用IDS如下

var artist = repository.Artist.First(d=>d.ArtistID==ArtistID); 

repository.Object.First(d=>d.ObjectID==ObjectID).Artists.Add(artist); 
    objectsRep.Update(); 
    objectsRep.SaveChanges(); 

問題更改URL類似http://domain.com/Object/AddArtistToObject?ObjectID=43+ArtistID=54

然後在我檢索對象和藝術家的作用是路由不會結束這個動作完全可以。我把斷點,但這個動作根本不會被調用。我應該如何更改URL以獲取此操作?你也認爲這種方法是對的嗎?或者我應該在繼續之前閱讀更多有關MVC的內容? :)

+0

我所知道的是,通過一個以上的參數,你可以做像Url的東西。Action(「AddArtistToObject」,「ControllerName」,new {ObjectID = 2,ArtistID = 2})。這個數字可以是你的變量。 – Dumisani

回答

2

http://domain.com/Object/AddArtistToObject?ObjectID=43+ArtistID=54

它應該是,更換+&

http://domain.com/Object/AddArtistToObject?ObjectID=43&ArtistID=54

那麼你的控制器動作將擊中默認路由 -

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

而控制器動作 -

public ActionResult AddArtistToObject(int ObjectID, int ArtistID) 
    { 
     return null; 
    } 

輸出 -

enter image description here

相關問題