【问题标题】:POST data to controller with ASP.NET MVC使用 ASP.NET MVC 将数据发布到控制器
【发布时间】:2026-01-22 19:50:01
【问题描述】:

我正在使用带有 C# 和纯引导程序的 ASP.NET MVC。我的一个视图包含一个标签、文本输入框和一个提交按钮:

@{
   ViewBag.Title = "BinSearch";
   Layout = "~/Views/Shared/_LayoutSearch.cshtml";
}

<h2>BinConfig Search</h2>

@using (Html.BeginForm("FiEdit", "EditConfigController"))
{
    <div class="form-group">
        <label for="issuerKey">Issuer Key</label>
        <input type="text" name="key" />
        <input type="submit" class="btn btn-default" value="Search" />
    </div>
}

当我点击“提交”按钮时,我想将数据传输到控制器,EditConfigController 到这个方法:

[HttpPost]
public ActionResult FiEdit(int key)
{
    return View(new IssuerKey().Key = key);
}

然后应该创建一个新视图,我可以在其中根据提供的键编辑数据。这是 FiEdit 视图:

@model BinFiClient.Models.IssuerKey

@{
    ViewBag.Title = "FiEdit";
    Layout = "~/Views/Shared/_LayoutEdit.cshtml";
}

<h2>FiEdit</h2>

但是,当我点击“提交”按钮时,我收到 404 错误,并且 URL 路径如下所示:

http://localhost:58725/EditConfigController/FiEdit

这实际上是我在上面发布的控制器中的方法的路径。

我需要的基本上是一种将数据发布到另一个控制器的方法。我怎样才能做到这一点?

编辑: 现在我收到错误消息:

传入字典的模型项是“System.Int32”类型,但该字典需要一个“BinFiClient.Models.IssuerKey”类型的模型项。

【问题讨论】:

    标签: c# asp.net asp.net-mvc post


    【解决方案1】:

    尝试用以下代码替换您的代码:

    @using (Html.BeginForm("FiEdit", "EditConfig", FormMethod.Post))
    {
        <div class="form-group">
            <label for="issuerKey">Issuer Key</label>
            <input type="text" name="key" />
            <input type="submit" class="btn btn-default" value="Search" />
        </div>
    }
    

    这会将参数key 发布到 EditConfig 控制器。

    如果您想在另一个控制器(例如 TestController)中发布到动作 TestEdit,您的代码应更改为以下内容:

    @using (Html.BeginForm("TestEdit", "Test", FormMethod.Post))
    ...
    

    要解决“模型项传入字典”错误,请将您的 POST 更改为:

    [HttpPost]
    public ActionResult FiEdit(int key)
    {
        return View(new IssuerKey() { Key = key });
    }
    

    【讨论】:

    • 这似乎有帮助,但现在我看到了错误The model item passed into the dictionary is of type 'System.Int32', but this dictionary requires a model item of type 'BinFiClient.Models.IssuerKey'. 为什么会这样?
    • 没关系,想通了!看起来我不小心将一个整数而不是它所需的 IssuerKey 传递给了我的视图。谢谢!
    【解决方案2】:

    你可以试试:

        @using (Html.BeginForm(("FiEdit", "EditConfigController", FormMethod.Post,
                    new { enctype = "multipart/form-data" })))
    {
        <div class="form-group">
            <label for="issuerKey">Issuer Key</label>
            <input type="text" name="key" />
            <input type="submit" class="btn btn-default" value="Search" />
        </div>
    }
    

    【讨论】:

    • @TobyCaulk 加油!是一个错误,但现在代码已修复。
    • 尝试:public ActionResult FiEdit() { var key = Request.Params["key"].ToString(); return View(new IssuerKey().Key = key); } 问题看起来像数据是如何发送到控制器的。在页面中未定义任何模型以进入您的视图并将其再次发送到控制器。