ASP.Net MVC 5 将表单 Post 中的初始模型参数传递给控制器
ASP.Net MVC 5 Pass Initial Model Parameter at Form Post to Controller
我的控制器中有一个创建操作。获取版本初始化绑定到视图中的表单的模型,如下所示。
public ActionResult Create(int someId)
{
AppDbContext = new ApplicationDbContext();
ItemViewModel model = new ItemViewModel()
{
SomeId = someId
};
return View(model);
}
并且 post 方法为
[HttpPost]
public async Task<ActionResult> Create(int someId, ItemViewModel model)
{
//Some Code Here
return View(model);
}
问题是我收到一个错误:
The parameters dictionary contains a null entry for parameter 'someId' of non-nullable type 'System.Int32' for method 'System.Threading.Tasks.Task`1[System.Web.Mvc.ActionResult] Create(Int32, SomeSystem.ViewModels.Admin.Some.SomeViewModel)' in 'SomeSystem.Controllers.SomeController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
Parameter name: parameters
虽然我的 URL 在 posting 之前看起来像:
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 方法中初始化的值应该在 post 中可用;但他们不是。
编辑:
我的观点只是一个表格:
@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
}
快速解决
您需要将 someId
放入表单中,以便将其发送到控制器方法。这不会自动发生。您应该继续尝试的第二件事,将 SomeId 放入模型中,然后将其放入您的表单中:
@Html.HiddenFor(m => m.SomeId)
更多详情
Html.HiddenFor
是一个辅助方法,它创建一个隐藏的 HTML 输入元素。当您传入 lambda 表达式 m => m.SomeId
时,输入会从模型中获得 属性 的值以及提交表单时 MVC 在控制器方法中用于绑定到您的模型的名称。这允许 someId
在用户提交表单时连同用户的输入一起发送回服务器。
在这种情况下,它生成的 HTML 将是这样的(不包括一些验证属性):
<input type="hidden" value="14" name="SomeId" />
我的控制器中有一个创建操作。获取版本初始化绑定到视图中的表单的模型,如下所示。
public ActionResult Create(int someId)
{
AppDbContext = new ApplicationDbContext();
ItemViewModel model = new ItemViewModel()
{
SomeId = someId
};
return View(model);
}
并且 post 方法为
[HttpPost]
public async Task<ActionResult> Create(int someId, ItemViewModel model)
{
//Some Code Here
return View(model);
}
问题是我收到一个错误:
The parameters dictionary contains a null entry for parameter 'someId' of non-nullable type 'System.Int32' for method 'System.Threading.Tasks.Task`1[System.Web.Mvc.ActionResult] Create(Int32, SomeSystem.ViewModels.Admin.Some.SomeViewModel)' in 'SomeSystem.Controllers.SomeController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter. Parameter name: parameters
虽然我的 URL 在 posting 之前看起来像:
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 方法中初始化的值应该在 post 中可用;但他们不是。
编辑: 我的观点只是一个表格:
@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
}
快速解决
您需要将 someId
放入表单中,以便将其发送到控制器方法。这不会自动发生。您应该继续尝试的第二件事,将 SomeId 放入模型中,然后将其放入您的表单中:
@Html.HiddenFor(m => m.SomeId)
更多详情
Html.HiddenFor
是一个辅助方法,它创建一个隐藏的 HTML 输入元素。当您传入 lambda 表达式 m => m.SomeId
时,输入会从模型中获得 属性 的值以及提交表单时 MVC 在控制器方法中用于绑定到您的模型的名称。这允许 someId
在用户提交表单时连同用户的输入一起发送回服务器。
在这种情况下,它生成的 HTML 将是这样的(不包括一些验证属性):
<input type="hidden" value="14" name="SomeId" />