这是我的LearnController,这是创建。
[HttpPost]
public ActionResult Create(Learn learn)
{
if (ModelState.IsValid)
{
db.Learns.Add(learn);
db.SaveChanges();
return RedirectToAction("Details", new { id = learn.ModuleId });
}
ViewBag.ModuleId = new SelectList(db.Modules, "ModuleId", "Code", learn.ModuleId);
return View(learn);
}
public ViewResult Details(int id)
{
var mod = db.Modules.Include("Learns").Single(g => g.ModuleId == id);
return View(mod);
}
在我的学习控制器的创建视图中,我放置了一个HTMLActionLink,但似乎无法重定向。我的代码有问题吗?
@Html.ActionLink("Back to List", "Details")
这是错误。
参数字典包含非可空类型'System.Int32'的参数'id'的空条目,用于'Module1.Controllers.LearnController'中方法'System.Web.Mvc.ViewResult Details(Int32)'。可选参数必须是引用类型,可空类型,或者声明为可选参数。 参数名称:参数
答案 0 :(得分:0)
“参数字典包含非可空类型'System.Int32'的参数'id'的空条目,参数应为可空类型,更改为
public ViewResult Details(int? id)
{
try
{
if (id.HasValue)
{
var mod = db.Modules.Include("Learns").Single(g => g.ModuleId == id);
if (mod == null)
throw new ArgumentException("Invalid ID");
return View(mod);
}
else
{
throw new ArgumentException("Invalid ID");
}
}
catch (ArgumentException ex)
{
return View(new Modules()); // assumed Details view model is Modules class
}
catch
{
return View(new Modules()); // assumed Details view model is Modules class
}
}
或
public ViewResult Details(string id)
{
try
{
int intId;
if(int.TryParse(id, out intId))
{
var mod = db.Modules.Include("Learns").Single(g => g.ModuleId == intId);
if (mod == null) throw new ArgumentException("Invalid ID");
return View(mod);
}
else
{
throw new ArgumentException("Invalid ID");
}
}
catch (ArgumentException ex)
{
return View(new Modules()); // assumed Details view model is Modules class
}
catch
{
return View(new Modules()); // assumed Details view model is Modules class
}
}
<强>更新强>
我想我误解了你的问题,所有你需要做的就是改变
@Html.ActionLink("Back to List", "Details" })
到
@Html.ActionLink("Back to List", "Details", new { id = Model.ModuleId })
按照Stephen Muecke的建议
答案 1 :(得分:0)
链接必须是@Html.ActionLink("Back to List", "Details", new { id = # })
,其中#是要显示的Module
的ID。因此,当您创建新的Learn
时,GET方法需要类似于
public ActionResult Create(int ID) // ID is the ModuleId your creating the Learn for
{
Learn model = new Learn();
model.ModuleID = ID;
return View(model);
}
并在视图中
@model Learn
....
@Html.ActionLink("Back to List", "Details", new { id = Model.ModuleID })
这假设Details
视图包含为Learn
创建新Module
的链接,其中链接为@Html.ActionLink("Add new Learn", "Create", new { id = Model.ID})
如果您可以从其他视图创建新的Learn
(您无权访问ID
的{{1}}属性),以及创建新视图的位置Module
允许您从下拉列表中选择Learn
表单,然后您需要javascript / jquery根据所选的Module
<更新链接的href
值/ p>