Saa*_*ooq 3 c# asp.net asp.net-mvc model-binding asp.net-mvc-5
我的控制器中有一个创建操作。获取版本初始化绑定到如下视图中的表单的模型。
public ActionResult Create(int someId)
{
AppDbContext = new ApplicationDbContext();
ItemViewModel model = new ItemViewModel()
{
SomeId = someId
};
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
和 post 方法为
[HttpPost]
public async Task<ActionResult> Create(int someId, ItemViewModel model)
{
//Some Code Here
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
问题是我收到一个错误:
参数字典包含非空类型“System.Int32”的参数“someId”的空条目,用于方法“System.Threading.Tasks.Task`1[System.Web.Mvc.ActionResult] Create(Int32, SomeSystem.ViewModels .Admin.Some.SomeViewModel)' 中的“SomeSystem.Controllers.SomeController”。可选参数必须是引用类型、可为空类型或声明为可选参数。参数名称:参数
虽然我发帖前的网址看起来像:
SomeController/Create?someId=14
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
[HttpPost]
public async Task<ActionResult> Create(ItemViewModel model)
{
var myvar = model.SomeId; //SomeId is Null.
//Some Code Here
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
我假设,我在 Create Action 的 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
}
Run Code Online (Sandbox Code Playgroud)
您需要放入someId表单,以便将其发送到控制器方法。这不会自动发生。您应该尝试第二件事,将 SomeId 放入模型中,然后将其放入表单中:
@Html.HiddenFor(m => m.SomeId)
Run Code Online (Sandbox Code Playgroud)
Html.HiddenFor是一个帮助方法,它创建一个隐藏的 HTML 输入元素。当您传入 lambda 表达式时m => m.SomeId,输入将获得模型中该属性的值以及一个名称,当表单提交时,MVC 使用该名称在控制器方法中绑定到您的模型。这允许someId在用户提交表单时将其与用户的输入一起发送回服务器。
在这种情况下,它生成的 HTML 将是这样的(不包括一些验证属性):
<input type="hidden" value="14" name="SomeId" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3377 次 |
| 最近记录: |