表单POST什么都不做

时间:2019-05-14 12:44:45

标签: c# asp.net .net asp.net-core razor

我有一个使用ASP.NET Core(最新版本)制作的Web应用程序,该应用程序需要使用一个弹出式表单,其中必须填写1个值,然后将其发送回控制器以供以后使用该值。

因此过程是这样的:按钮>单击按钮>弹出表单(图像:pop-up form which is a partial view)>填写值>提交>将结果发送回控制器。

但是,每当我按下“提交”按钮时,它就会使我进入“ 400错误未找到”页面。怎么可能出问题了?

这是部分视图弹出表单代码:

@model IEnumerable<ApplicationName.Models.Moederblad>
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, AuthoringTagHelpers
@Html.AntiForgeryToken()

<div id="element_to_pop_up">
    <a class="b-close">x</a>
    //Actionresult > Controller
    @using (Html.BeginForm("Incassodatum", "Moederblads", FormMethod.Post))
    {
        <br />
        <div class="row">
            <div class="col-md-6">
                <label for="Incassodatum">Incassodatum</label>
                <input class="form-control" placeholder="Bijvoorbeeld: 19-02-2020" type="text" data-val="true" data-val-regex="Dat is geen geldige datum" data-val-regex-pattern="^(0[1-9]|[12][0-9]|3[01])[/](0[1-9]|1[012])[/](19|20)[0-9]{2}$, " id="Incassodatum" name="Incassodatum">
            </div>
        </div>
        <div class="row">
        </div>
        <br>
        <input name="__RequestVerificationToken" type="submit" class="btn btn-primary submit" value="Toevoegen" id="submit">
    }
</div>

这是对应的控制器:

        [HttpGet]
        public ActionResult Incassodatum()
        {
            return View();
        }

        //Automatisch de datum van vandaag in het Incassodatum veld zetten nadat er op een knop is gedrukt
        [HttpPost, ValidateAntiForgeryToken]
        public ActionResult Incassodatum(string Incassodatum)
        {
            string date= "";
            if (ModelState.IsValid)
            {
                date = Incassodatum;
            }
            else
            {
                date = "Something went wrong.";
            }
            TempData["Incassodatum"] = $"{Incassodatum}";
            return RedirectToAction("Index");
        }

然后,我可以使用tempdata读取该值,但是它根本不起作用,因此实际上暂时没有用。

我尝试在帖子上方添加[Route(“ Moederblads / Incassodatum”)]属性。 我在普通视图(不是局部视图)中尝试过,在那里可以看到F12的值。 尝试更改对象名称,因为我认为它可能与其他名称冲突。

不知道现在该怎么办。你们中有人猜吗?

2 个答案:

答案 0 :(得分:0)

  

但是,每当我按下“提交”按钮时,它就会使我进入一个400错误未找到页面。

400错误是错误请求。 404是找不到。因此,我不确定您实际到达的是哪个。但是,基于您输入的名称为__RequestVerificationToken,而您使用的输入错误的事实,我倾向于使用400。

由于您尝试使用此输入作为按钮,因此已在其上设置了一个值,以将该文本应用于按钮。但是,这实际上将为__RequestVerificationToken发布该值,并且不是有效令牌。因此,由于请求验证失败,您将始终收到400错误请求。

请求验证令牌应该在隐藏的输入上,因此最简单的解决方案是从该按钮中删除名称,并添加专门用于请求验证令牌的隐藏输入:@Html.AntiForgeryToken()

最好使用内置的FormTagHelper,它会自动处理防伪令牌:

<form asp-action="Incassodatum" asp-controller"Moederblads" method="post">
    ...
</form>

最后,尽管从技术上讲它没有任何作用,但应使用input作为按钮是一种反模式。请改用<button type="submit">

答案 1 :(得分:0)

最后很简单:我只需要删除方法上方的[HttpPost]标签和[HttpGet]方法,因为最后它什么也没做。之后,它达到了我的断点,可以验证该值是否正常:)