Html.BeginForm() 在我的控制器上执行错误的操作

Posted

技术标签:

【中文标题】Html.BeginForm() 在我的控制器上执行错误的操作【英文标题】:Html.BeginForm() going to the wrong action on my controller 【发布时间】: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 进行任何更改。 【参考方案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分钟

以上是关于Html.BeginForm() 在我的控制器上执行错误的操作的主要内容,如果未能解决你的问题,请参考以下文章

替换为 Html.BeginForm()

如何使用 Html.Listboxfor 和 Html.Beginform

上传文件时出错:@using Html.BeginForm

使用 .trigger('submit') 时 Html.BeginForm 未提交

Html.BeginForm 在区域后自动添加子文件夹

Html.BeginForm (ASP.NET MVC) 的问题