C# 由于某种原因,ASP.NET MVC 3的操作方法调用不明确

C# 由于某种原因,ASP.NET MVC 3的操作方法调用不明确,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,呃!我对MVC这件事有点不知所措,我遇到了一个需要帮助的问题 我目前正在为一家管理寄养儿童的公司进行一个项目,该项目的主要部分是一个MVC web应用程序,用于寄养父母必须定期向公司提交的一些表格。到目前为止,我最大的问题是将输入表单的数据保存回数据库。但我最近有了一个突破,我意识到我可以做到这一点: public ActionResult SaveForm(FormChildTherapeuticWeeklyForm formData) 这是超棒的,并且完美地适用于第一种形式。但在添加了两个

呃!我对MVC这件事有点不知所措,我遇到了一个需要帮助的问题

我目前正在为一家管理寄养儿童的公司进行一个项目,该项目的主要部分是一个MVC web应用程序,用于寄养父母必须定期向公司提交的一些表格。到目前为止,我最大的问题是将输入表单的数据保存回数据库。但我最近有了一个突破,我意识到我可以做到这一点:

public ActionResult SaveForm(FormChildTherapeuticWeeklyForm formData)
这是超棒的,并且完美地适用于第一种形式。但在添加了两个表单之后:

public ActionResult SaveForm(FormChildBasicCareMonthlyProgressReport formData)
public ActionResult SaveForm(FormFosterFamilyRequestForRemovalOrDischarge formData)
我已开始收到一个当前对控制器类型“FormsController”的操作“SaveForm”的请求在以下操作方法之间不明确:错误

虽然我知道我可以用不同的名称来命名每个动作,但我想看看是否有更好的方法来处理这个问题,因为我遇到了这个错误

更多信息:三个视图中的每一个都是强类型的,属于三个模型/类中的一个

正如我所说,我对MVC的东西还是有点不在行,但我会尽力提供您可能需要的任何其他信息

谢谢

您可以使用来区分它们。你会这么做的

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

您将有不同的路线/使用每个路线的默认路线。另一种方法是创建自己的实现,这将依赖于传入的内容,但更复杂。

您可以通过使用属性[HttpGet]和[HttpPost]来解决此问题。应用这些属性将告诉您应该为特定的请求类型调用什么方法。

您可以,只要您以某种方式区分它们。查看本文了解更多信息:

是的,最好为操作提供不同的名称,以防它们使用不同的模型类作为参数

MVC框架使用所谓的绑定器,将来自web表单(或AJAX,或其他)的数据绑定到CLR对象。实现这种绑定并不是一种简单的方法,因为它从url编码的表单中解析出数据,并尝试映射到相应的CRL对象属性

某些对象可能具有相同的属性名称,在这种情况下,无法理解如何进行正确的映射

为了消除这两个方法调用之间的歧义,需要使用


这里有一个例子:

看起来他的所有方法都可能是帖子。谢谢你的建议,但我不太确定这会有什么帮助。我还有什么需要补充的吗,或者只是给每一个都起了不同的名字?(我现在正在尝试,顺便说一句)@Daniel你必须确保你正在使用的路由与名称的更改相匹配。我想我理解,但从长远来看,让每个操作的名称都是唯一的似乎会更容易,而不是试图重载一个。谢谢虽然ActionMethodSelectorAttribute现在有点让我不知所措,但我真的很高兴你发布了这个链接!我很快就会有一个多按钮的情况,这将是非常有帮助的!谢谢