我有一个编辑页面,提交表单后,我会刷新页面,而不是将用户重定向到索引页面。为此,我将项目的 ID 保存在临时变量中,然后使用临时变量 ID 将用户重定向到编辑页面。像这样的东西:
[HttpGet]
public ActionResult Edit(Guid id)
{
TempData["CategoryID"] = id;
Category c = new CategoriesBL().GetCategory(id);
return View(c);
}
[HttpPost]
public ActionResult Edit(Category c)
{
new CategoriesBL().UpdateCategory(c);
return RedirectToAction("Edit", (Guid)TempData["CategoryID"]);
}
这工作正常。但是,我在同一页面上有两种不同形式的方法,每当我提交这两种方法中的任何一种时,重定向都不起作用,并且出现异常。
无效的方法之一:
[HttpPost]
public ActionResult AddNewThumbnail()
{
List<byte[]> thumbs = new List<byte[]>();
for (int i = 0; i < Request.Files.Count; i++)
{
thumbs.Add(ConvertToByteArray(Request.Files[i].InputStream));
}
new CategoriesBL().AddCategoryThumbnail(thumbs, (Guid)TempData["CategoryID"]);
return RedirectToAction("Edit", (Guid)TempData["CategoryID"]);
}
例外:
参数字典包含不可为空类型“System.Guid”的参数“id”的空条目....
我认为这是路由的问题,但事实是使用了相同的实现,并且它在一种形式上工作,而不是另一种形式。我不确定我是否做错了什么,或者是否有更好的方法来做到这一点。
注意:我已经多次调试了代码,并且我传递给该方法的 ID 中确实有一个值。但是,当页面重新加载时,URL 没有 ID。
调试
问题似乎是由于我使用的不同形式。我只是在编辑文本的第一种形式,它是这样的:
@using (Html.BeginForm()) {
// ....
}
在第二种形式中,我正在保存和上传图像,因此形式必须不同
@using (Html.BeginForm("AddNewThumbnail", "Category", FormMethod.Post, new { enctype = "multipart/form-data" })) {
// ....
}
不知何故,当我将表格更改为“正常”表格时,一切正常。但是我当然不能使用它,因为我想从这个表单中保存图像。