ERS!对于整个MVC来说,我有点像菜鸟,我遇到了一个需要帮助的问题。
我目前正在为一家管理寄养儿童的公司开展一个项目,该项目的主要部分是一些MVC网络应用程序,用于培养父母必须定期提交给公司的一些表格。到目前为止,我最大的问题是将已输入表单的数据保存回数据库。但是当我意识到我能做到这一点时,我最近取得了突破:
public ActionResult SaveForm(FormChildTherapeuticWeeklyForm formData)
这是非常棒的,并且完美地适用于第一种形式。但是在添加了两个表单之后:
public ActionResult SaveForm(FormChildBasicCareMonthlyProgressReport formData)
public ActionResult SaveForm(FormFosterFamilyRequestForRemovalOrDischarge formData)
我已经开始得到一个 当前的控制器类型'FormsController'上的'SaveForm'请求在以下操作方法之间是不明确的: 错误。
虽然我知道我可以用不同的方式命名每个动作,但我想看看是否有更好的方法可以解决这个问题,因为我遇到了这个错误。
更多信息:三个视图中的每个视图都强类型为三个模型/类之一。
正如我所说,我仍然是MVC的一个菜鸟,但我会尽力提供您可能需要的任何其他信息。
谢谢!
答案 0 :(得分:1)
您可以使用ActionNameAttribute来区分它们。那样你会做
[ActionName("Child")]
public ActionResult SaveForm(FormChildBasicCareMonthlyProgressReport formData)
你有不同的路线/使用每个路线的默认路线。另一种方法是创建自己的ActionFilterAttribute实现,它依赖于传入的内容,但这更复杂。
答案 1 :(得分:1)
只要您以某种方式区分它们,您就可以。请查看此文章以获取更多信息:Can you overload controller methods in ASP.NET MVC?
答案 2 :(得分:1)
是的,最好为动作提供不同的名称,以防它们使用不同的Model类作为参数。
MVC框架使用所谓的Binders,将来自Web表单(或AJAX或其他)的数据绑定到CLR对象。实现这种绑定并不是一种简单的方法,因为它从url-encoded-form中解析数据并尝试映射到相应的CRL对象属性。
某些对象可能具有相同的属性名称,在这种情况下,Binder无法理解如何进行正确的映射;
答案 3 :(得分:1)
您需要使用ActionMethodSelectorAttribute才能消除对这两种方法的调用之间的歧义。
答案 4 :(得分:0)
您可以使用属性[HttpGet]和[HttpPost]解决此问题。应用这些属性将告诉应该为特定请求类型调用哪种方法。