繁体   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