簡體   English   中英

不明確的動作方法調用,由於某種原因ASP.NET MVC 3

[英]Ambiguous action method call, for some reason ASP.NET MVC 3

ERS! 對於整個MVC來說,我有點像菜鳥,我遇到了一個需要幫助的問題。

我目前正在為一家管理寄養兒童的公司開展一個項目,該項目的主要部分是一些MVC網絡應用程序,用於培養父母必須定期提交給公司的一些表格。 到目前為止,我最大的問題是將已輸入表單的數據保存回數據庫。 但是當我意識到我能做到這一點時,我最近取得了突破:

public ActionResult SaveForm(FormChildTherapeuticWeeklyForm formData)

這是非常棒的,並且完美地適用於第一種形式。 但在添加兩個表單之后:

public ActionResult SaveForm(FormChildBasicCareMonthlyProgressReport formData)
public ActionResult SaveForm(FormFosterFamilyRequestForRemovalOrDischarge formData)

我已經開始得到一個當前的控制器類型'FormsController'上的'SaveForm'請求在以下操作方法之間是不明確的:錯誤。

雖然我知道我可以用不同的方式命名每個動作,但我想看看是否有更好的方法可以解決這個問題,因為我遇到了這個錯誤。

更多信息:三個視圖中的每個視圖都強類型為三個模型/類之一。

正如我所說,我仍然是MVC的一個菜鳥,但我會盡力提供您可能需要的任何其他信息。

謝謝!

您可以使用ActionNameAttribute來區分它們。 這樣你會這樣做

[ActionName("Child")]
public ActionResult SaveForm(FormChildBasicCareMonthlyProgressReport formData)

並且你有不同的路線/使用每個路線的默認路線。 另一種方法是創建自己的ActionFilterAttribute實現,它依賴於傳入的內容,但這更復雜。

只要您以某種方式區分它們,您就可以。 查看本文以獲取更多信息:是否可以重載ASP.NET MVC中的控制器方法?

是的,如果它們使用不同的Model類作為參數,最好為操作提供不同的名稱。

MVC框架使用所謂的Binders,將來自Web表單(或AJAX或其他)的數據綁定到CLR對象。 實現這種綁定並不是一種簡單的方法,因為它從url-encoded-form解析數據並嘗試映射到相應的CRL對象屬性。

某些對象可能具有相同的屬性名稱,在這種情況下,Binder無法理解如何進行正確的映射;

您需要使用ActionMethodSelectorAttribute來消除這兩種方法的調用之間的歧義。

請參閱此處的示例: http//weblogs.asp.net/dfindley/archive/2009/05/31/asp-net-mvc-multiple-buttons-in-the-same-form.aspx

您可以使用屬性[HttpGet]和[HttpPost]來解決此問題。 應用這些屬性將告訴應該為特定請求類型調用哪種方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM