我很难理解当ModelState无效时会发生什么(EF4.1,数据库优先)。
以下代码显示了为项目创建任务。
每当模型有效时,一切正常,但是当模型无效时,我得到一个例外,没有参数传递给模型(但是路线是正确的,一切都应该没问题)。 我做错了什么?
//
// POST: /Task/Create
[Authorize()]
[HttpPost]
public ActionResult Create(int projectId, CPIO_Tasks task)
{
ViewBag.projId = projectId;
try
{
task.t_p_id = projectId;
if (ModelState.IsValid)
{
db.CPIO_Tasks.AddObject(task);
db.SaveChanges();
return RedirectToAction("Details", "Projects", new { id = task.t_p_id });
}
}
catch (DataException ex)
{
ModelState.AddModelError("Nieudane dodanie:", ex.ToString());
}
return RedirectToAction("Create", "Task", new {id = projectId});
}
参数字典包含非可空类型'System.Int32'的参数'projectId'的空条目,用于'CPIO_WebUI.Controllers.TaskController'中方法'System.Web.Mvc.ActionResult Create(Int32)'。可选参数必须是引用类型,可空类型,或者声明为可选参数。 参数名称:参数
重定向ID正确的路径:localhost:11314 / Task / Create / 2。
提前感谢您提供任何帮助
安娜
答案 0 :(得分:1)
正如错误消息所示,为了不将projectId
传递给您的方法,您需要使您的方法看起来像这样:
public ActionResult Create(int? projectId, CPIO_Tasks task)
{
// .....
}
这样做是使用Nullable<int>
来获取值类型的参数(不允许null
)并使其成为允许null
的引用类型。这样,您可以传递null
值而不会遇到此异常。
答案 1 :(得分:1)
我怀疑模型错误实际上来自您的GET操作,而不是您的POST操作。通常,当您出现模型错误时,您不会重定向,只需返回模型错误完整的相同视图,然后根据需要重新生成模型。在没有看到你的GET动作的情况下,很难说,但是尝试用适当的模型替换最终的重定向,并查看它是否对你不起作用。