C# Html.BeginForm调用错误的URL并执行操作/1
在我的申请中,我在“/Project/AddFund/1”中有一个表格: 这是一个例外:C# Html.BeginForm调用错误的URL并执行操作/1,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,在我的申请中,我在“/Project/AddFund/1”中有一个表格: 这是一个例外: No parameterless constructor defined for this object. [MissingMethodException: No parameterless constructor defined for this object.] exception is thrown 正如StephenMuecke在评论中所说,我使用的ModelView有一个自定义构造函数,但没有默
No parameterless constructor defined for this object. [MissingMethodException: No parameterless constructor defined for this object.] exception is thrown
正如StephenMuecke在评论中所说,我使用的ModelView有一个自定义构造函数,但没有默认构造函数……这就是错误强>
如何使此窗体与此控制器一起工作
提前感谢当您对具有参数的操作发出请求时,MVC会尝试为您创建这些参数,并使用来自请求正文、路由值、查询字符串的数据填充这些参数。。。(这些是价值提供者) 这个过程称为“模型绑定”。而且,如果有一个参数是对象,比如
AddFundToProjectViewModel
,那么模型绑定的第一步是创建该对象的空实例,它需要一个默认(无参数)构造函数
构建对象后,它将尝试使用适当的名称设置来自值提供程序的属性值
默认情况下,所有类都有一个默认(无参数)构造函数。但是,如果使用参数定义构造函数,则不提供默认构造函数。因此,要解决您的问题,请向
AddFundToProjectViewModel
类添加一个无参数构造函数,以便模型绑定器可以完成它的工作。添加字符串?ID
参数?如果GET方法是public ActionResult AddFund(int ID)
,则添加路由值1
。这与为什么你的帖子不起作用无关。那么你的实际问题是什么呢。你的模型没有约束力吗?如果是这样,发布模型、获取方法和视图。(route参数所做的只是将AddFundToProjectViewModel
的ID
属性绑定到1
的值,当您发回时)基于您的编辑,我建议删除该内部方法。这种代码属于控制器,而不是视图模型。但是你已经显示了CreateProjectViewModel
,而不是AddFundToProjectViewModel
@StephenMuecke你又对了,我创建了一个自定义构造函数,但没有默认值。我同意你所说的那种代码的位置。
<form method="post" action="/Project/AddFund/1" novalidate="novalidate"><input type="hidden" value="tM8Gdmnki5mdHiTeuc9m_Ga_LY0hPhuSyAiXs6Ae9yedUn9h-sS-ihBC5Iy3NZtrxBmA7TRbV_jEPgvztuHT3Y6seGZvaLWJUemwg2_5OBR23dVELfJ1wHb0pvAcAOuu0huy_PzAozsQtxZUSBFUQw2" name="__RequestVerificationToken"> <div>
...
</form>
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult AddFund(AddFundToProjectViewModel model)
{...}
No parameterless constructor defined for this object. [MissingMethodException: No parameterless constructor defined for this object.] exception is thrown