ASP.Net MVC 5 将表单发布时的初始模型参数传递给控制器

本文关键字:初始模型 参数传递 控制器 布时 MVC Net 表单 ASP | 更新日期: 2023-09-27 18:37:22

我的控制器中有一个创建操作。Get 版本初始化绑定到视图中窗体的模型,如下所示。

public ActionResult Create(int someId)
    {
        AppDbContext = new ApplicationDbContext();
        ItemViewModel model = new ItemViewModel()
        {
            SomeId = someId
        };
        return View(model);
    }

和后方法作为

    [HttpPost]
    public async Task<ActionResult> Create(int someId, ItemViewModel model)
    {
        //Some Code Here
        return View(model);
    }

问题是我收到一个错误:

参数字典包含不可为空的类型"System.Int32"的参数"someId"的空条目,用于"SomeSystem.Controllers.SomeControllers.SomeController"中的方法"System.Threading.Tasks.Task'1[System.Web.Mvc.ActionResult] create(Int32, SomeSystem.ViewModels.Admin.Some.SomeViewModel)"。可选参数必须是引用类型、可为 null 的类型或声明为可选参数。 参数名称:参数

虽然我在发布前的网址看起来像:

 SomeController/Create?someId=14

我也尝试过:

    [HttpPost]
    public async Task<ActionResult> Create(ItemViewModel model)
    {
        var myvar = model.SomeId; //SomeId is Null.
        //Some Code Here
        return View(model);
    }

我假设,我在创建操作的 Get 方法中初始化的值应该在帖子中可用;但它们不是。

编辑:我的观点只是一个表格:

@model AuctionSystem.ViewModels.Admin.Item.ItemViewModel
@using (Html.BeginForm("Create", "AdminItem", FormMethod.Post, new { @class = "form-horizontal", role = "form", enctype = "multipart/form-data" }))
{ 
     //HTML Helpers for Text boxes
     //Submit Button
}

ASP.Net MVC 5 将表单发布时的初始模型参数传递给控制器

快速解决方案

您需要将someId放入窗体中,以便将其发送到控制器方法。这不会自动发生。你应该继续你尝试的第二件事,将SomeId放在模型中,然后将其放入您的表单中:

@Html.HiddenFor(m => m.SomeId)

更多详情

Html.HiddenFor 是一个帮助程序方法,用于创建隐藏的 HTML 输入元素。当您传入 lambda 表达式 m => m.SomeId 时,输入将获得模型中该属性的值,以及在提交表单时 MVC 用于绑定到控制器方法中的模型的名称。这允许在用户提交表单时将someId与用户的输入一起发送回服务器。

在这种情况下,它生成的 HTML 将是这样的(不包括一些验证属性):

<input type="hidden" value="14" name="SomeId" />