【问题标题】:asp.net mvc 5 form post doesn't workasp.net mvc 5 表单帖子不起作用
【发布时间】:2018-10-16 11:55:21
【问题描述】:

我在 asp.net mvc 5 中提交表单时遇到问题。当我使用 razor Html.BeginForm() 时,它会创建一个带有空操作的表单并且它不起作用。当我使用 html 代码时,它会打开带有错误 404 的新页面“site.com/Home/NewDeck”

以下两个视图的代码都不起作用。

这是视图代码(使用 Html.BeginForm()):

@using (Html.BeginForm("NewDeck", "Home", FormMethod.Post, new { @class="popup-form"}))
    {

        <div class="popup-header-row">
            <div style="display:flex; margin: 0; width: 24px"></div> @*pseudo element*@
            <div class="popup-header">New deck</div>
            <img id="btn-close-new-deck" src="~/Content/images/close.svg" class="close-button" />
        </div>

        @Html.TextBoxFor(Model => Model.NewDeck.Name, new { @placeholder = "Name of the deck", @class = "input-text-form" })

        <input type="submit" value="Add deck" class="btn-one-center" />
    }

这是视图代码(带表单):

    <form method="post" action="/Home/NewDeck" class="popup-form">
        <div class="popup-header-row">
            <div style="display:flex; margin: 0; width: 24px"></div> @*pseudo element*@
            <div class="popup-header">New deck</div>
            <img id="btn-close-new-deck" src="~/Content/images/close.svg" class="close-button" />
        </div>

        @Html.TextBoxFor(Model => Model.NewDeck.Name, new { @placeholder = "Name of the deck", @class = "input-text-form" })

        <input type="submit" value="Add deck" class="btn-one-center" />

    </form>

这是 HomeController 代码:

    [Route("")]
    [HttpGet]
    public ActionResult Index()
    {
        Model = new HomeViewModel { DeckList = Database.GetDecksList("mail@gmail.com") };
        Model.NewDeck = new Deck { Random = false };         
        return View(Model);
    }

    [HttpPost]
    public ActionResult NewDeck(HomeViewModel model)
    {
        Database.AddDeck(model.NewDeck.Name, "mail@gmail.com", model.NewDeck.Random);
        return View(model);
    }

【问题讨论】:

  • 当您拥有Html.BeginForm("NewDeck", "Home" 时会发生什么?当你使用它时,你应该删除内部表单,因为嵌套表单是无效的!
  • @Shyju Html.BeginForm() 被评论
  • 我是说为什么不使用它?助手将正确设置动作属性值,而不是硬编码并获得 404。只需使用它并删除内部表单。
  • @Shyji 我不一起使用这些。我已经更新了这个问题。两者都不起作用
  • 那么当您现在点击提交按钮时会发生什么?你的代码对我来说很好。它会提交表单。您是否有一些 js 代码劫持了提交/单击事件。 ?

标签: html razor asp.net-mvc-5


【解决方案1】:

您的路由或参数似乎有问题,因为表单当前没有达到您想要的操作。

尝试将操作中的参数替换为仅用于调试的一些字符串值,并将其命名为“sample”,并在您的表单中放置一个名称为“sample”的文本字段,它将帮助您找出是否是您的参数传递或路由存在问题,如果可以正常工作,那么您需要重新考虑您从视图传递的模型,或者重新检查您的路由。

还要检查数据库中的值,如果它们正在更新,那么“在新选项卡中使用 404(未找到)打开新页面”的错误是因为您的 POST 操作返回的视图应该是GET View 并且您的 Controller 中没有同名的 GET Action。

所以请使用与您的帖子操作同名的获取操作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 2014-03-26
    相关资源
    最近更新 更多