【问题标题】:Html.BeginForm() going to the wrong action on my controllerHtml.BeginForm() 在我的控制器上执行错误的操作
【发布时间】:2021-11-26 20:49:26
【问题描述】:

我有一个使用 Html.BeginForm() 构建的 HTML 表单。我指定了我的控制器名称和操作名称,但它没有转到正确的操作。

这是我认为的相关行:

@using (Html.BeginForm("AdminPanelResult", "AdminPanel", FormMethod.Post))

在我的控制器中,我有两种方法。无论我做什么,它总是转到 AdminPanel() 而不是 AdminPanelResult()。

这是 AdminPanel 的样子:

public ActionResult AdminPanel() {...}

这是 AdminPanelResult():

[System.Web.Http.HttpPost]
public ActionResult AdminPanelResult(ContentModel model) {...}

我的问题,如何让 Html.BeginForm 实际使用正确的操作?

编辑:这里要求的是我的视图形式的其余部分:

    <legend>Admin Panel Access</legend>
@using (Html.BeginForm("AdminPanelResult", "AdminPanel", FormMethod.Post))

{
    <fieldset>
        <div id="AdminPanelResult"></div>
        <ol>
            <label for="selOrgName">Choose an Organization Name:</label>
            <select name="selOrgName" id="selOrgName">
                <option id="0">Select an Org Name</option>

                @foreach (var r in data.glOrgName)
                {
                    <option id="@r.OrgKey" value="@r.OrgName">@r.OrgName</option>
                }
            </select>
            <label for="apiDrop">Choose the type of Data:</label>
            @Html.DropDownList("ApiId", (MultiSelectList)ViewBag.Categories, new { multiple = "multiple" })


            <li>
                @Html.Label("...")
                @Html.TextBox("..")
            </li>
    <!--Several more identical elements removed for brevity-->
        </ol>

        <p>
            <input type="submit" value="Submit" />
        </p>

    </fieldset>
}

【问题讨论】:

  • 您的 Startup.cs 文件是什么样的?您是否注册了任何非默认路由?
  • 控制器的名称是什么?
  • 控制器名称为 AdminPanelController。为此,我没有对 Startup.cs 进行任何更改。

标签: c# html asp.net-mvc umbraco


【解决方案1】:

假设您的控制器名称是“AdminPanel”,如果您需要将表单提交到 AdminPanelResult 操作,请使用此

@using (Html.BeginForm("AdminPanelResult", "AdminPanel", FormMethod.Post))

或者如果您需要将表单提交到 AdminPanel 操作,请使用此

@using (Html.BeginForm("AdminPanel", "AdminPanel", FormMethod.Post))

由于我看不到您的视图,您必须使用提交按钮来提交表单,而不是使用 ancor 标记。 Ancor 标记始终生成一个 get 方法,并且不遵循表单操作。

如果仍然无法正常工作,则必须修复路由。我看不到你的控制器,但这肯定会工作

[HttpPost("~/AdminPanel/AdminPanelResult")]
public ActionResult AdminPanelResult(ContentModel model) {...}

【讨论】:

  • 我的控制器的名字是AdminPanelController.cs
  • 请发布您的其余视图,包括您的提交按钮,如果会影响它的提交方式。
  • 行,给我5分钟
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 2014-03-20
  • 1970-01-01
  • 2015-10-28
相关资源
最近更新 更多