2012-03-12 58 views
0

是否有可能在控制器中執行動作的超載?我還沒有發現任何關於它的信息,當我試圖,我得到這個錯誤:控制器中的動作過載

The current request for action 'Create' on controller type 'InterviewController' is >ambiguous between the following action methods: System.Web.Mvc.ViewResult Create() on type >MvcApplication4.MvcApplication4.InterviewController System.Web.Mvc.ViewResult Create(Int32) on type >MvcApplication4.MvcApplication4.InterviewController

我試圖做到這一點的另一種方法,我也得到一個新的錯誤,我無法修復。實際上,我創建了一個新動作(稱爲create_client而不是創建)

我需要2種創建「機會」的方法。

  1. 我只是打電話給我,我收到一個空的表格,我只需要插入數據。
  2. 從客戶的頁面,我必須創建一個「機會」與客戶已經完成時,窗體顯示給用戶。 (需要生產力,用戶必須儘可能快地執行操作)。

在表「機會」中,我有一個名爲「FK_opp_client」的列,它等於客戶端表中的列「idClient」。

我不明白我能做第二種方式。

我在控制器中創建了一個新動作。

' 
    ' GET: /Opportunite/Create_client 

Function Create_client(idclient) As ViewResult 
    'Dim FK_Client = (From e In db.client 
    'Where(e.idClient = idclient) 
    '     Select e.nomCompteClient).ToString() 
    'ViewBag.FK_client = New SelectList(db.client, "idClient", "nomCompteClient", idclient) 
    Dim opportunite As opportunite = db.opportunite.Single(Function(o) o.idOpportunite = 5) 
    opportunite.FK_Client = idclient 
    ViewBag.FK_Client = New SelectList(db.client, "idClient", "nomCompteClient", opportunite.FK_Client) 

    Return View(opportunite) 
End Function 

我試過幾件事情得到我想要的東西,上一次是複製的內容是在「編輯」動作完成,但對於空的排名。 (所以我在我的數據庫中創建了一個空列)。我認爲這不是一個好主意(想象有人想更新idOpportunite = 5的DB)

有什麼更好的想法?

回答

1

如果你想讓這兩個方法保持同名,你必須實現一個ActionSelectionAttribute來裝飾它們,或者用不同的動詞(例如POST和PUT)來使用它們。請閱讀更多關於行動方法選擇過程here(舊但仍然如此)的詳細信息。

不同的方法可能會使您的參數optional並作出檢查它是否已通過(通過可空類型)的操作。

+0

thx爲我花費的時間。我將使用變成動作的方法。對於另一個問題。有什麼更好的想法,我可以如何改進我發現的方式來處理預填表格? – 2012-03-12 15:54:15