gpt4 book ai didi

c# - Html.BeginForm 使用 action/1 调用错误的 URL

转载 作者:行者123 更新时间:2023-11-30 18:27:03 25 4
gpt4 key购买 nike

在我的应用程序中,我在“/Project/AddFund/1”中有一个表单:

@using (Html.BeginForm("AddFund", "Project", FormMethod.Post))
{
@Html.AntiForgeryToken()
<div>
...
<input type="submit" value="Save" class="btn btn-default" />
</div>
}

但是呈现的html是

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

在我的 Controller 中,此方法必须捕获表单提交,但它确实不起作用,因为带有/id 的 URL,永远不会调用 Controller 的代码:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult AddFund(AddFundToProjectViewModel model)
{...}

这是异常(exception)情况:

No parameterless constructor defined for this object. [MissingMethodException: No parameterless constructor defined for this object.] exception is thrown

正如 StephenMuecke 在评论中所说,我使用了一个具有一个自定义构造函数但没有默认构造函数的 ModelView...这就是错误!

如何使这个表单与这个 Controller 一起工作?

提前致谢

最佳答案

当您向具有参数的操作发出请求时,MVC 会尝试为您创建这些参数,并用来自请求正文、路由值、查询字符串的数据填充它们……(这些是值提供商)。

此过程称为“模型绑定(bind)”。而且,如果有一个对象参数,如 AddFundToProjectViewModel 模型,模型绑定(bind)的第一步是创建该对象的一个​​空实例,为此它需要一个默认(无参数)构造函数.

构建对象后,它会尝试使用适当的名称设置来自值提供者的属性值。

默认情况下,所有类都有一个默认(无参数)构造函数。但是,如果您定义带参数的构造函数,则不会提供默认构造函数。因此,要解决您的问题,请向您的 AddFundToProjectViewModel 类添加一个无参数构造函数,以便模型绑定(bind)器可以完成其工作。

关于c# - Html.BeginForm 使用 action/1 调用错误的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27482956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com