【发布时间】:2016-03-05 05:51:48
【问题描述】:
我的控制器中有一个创建操作。 Get 版本初始化绑定到 View 中的 Form 的模型,如下所示。
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);
}
问题是我得到一个错误:
参数字典包含方法“System.Threading.Tasks.Task`1[System.Web.Mvc.ActionResult] Create(Int32, SomeSystem.ViewModels.Admin.Some.SomeViewModel)”在“SomeSystem.Controllers.SomeController”中。可选参数必须是引用类型、可空类型或声明为可选参数。 参数名称:参数
虽然我发帖前的网址看起来像:
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);
}
我假设,我在 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
}
【问题讨论】:
-
错误是指一个有 2 个参数的方法,
int someId和SomeViewModel(不是上面显示的Create(int someId))。另请注意,您不需要 POST 方法中的int someId参数,因为它已经绑定到模型的属性) -
那么这意味着您没有为
SomeId发布值(问题在于您的观点) -
你没有展示你的观点,我们怎么知道你做错了什么。
-
表单是否包含属性
SomeId的输入? (例如@Html.HiddenFor(m => m.SomeId)) -
当然。网络是无状态的。如果您不从客户端向服务器发送数据,服务器如何知道
SomeId是什么。或者,您可以将其添加为路由参数。
标签: c# asp.net asp.net-mvc asp.net-mvc-5 model-binding