我正在使用带有用户登录的MVC模板编写一个简单的ASP论坛。 这对我来说真的很新,很难掌握。我设法实现发布主题和评论,删除它们但编辑给了我一些重大问题。 这是我的行动:
public ActionResult EditReply()
{
int.TryParse((string)Url.RequestContext.RouteData.Values["id"], out int id);
Topic topic = db.Topics.Find(id);
int.TryParse((string)Url.RequestContext.RouteData.Values["id"], out int commentId);
Comment comment = topic.Comments.Find(x => x.Id == commentId);
return View(comment);
}
我得到"对象引用未设置为对象的实例"。调试显示注释变量由于获取ID失败而为空,因为似乎commentId变量的值为0.它适用于topicId但不适用于commentId。但是,我收到错误的网址显示http://localhost:49834/Home/EditReply?TopicId=16&CommentId=43 所以Id在那里,但我无法提取它。我是ASP的新手。任何形式的输入将不胜感激。 谢谢!
答案 0 :(得分:1)
MVC将为您完成工作。将您的操作定义为
public ActionResult EditReplay(int topicId, int commentId) { …
模型绑定将使用查询字符串或表单值来填充参数。使用MVC,您很少需要直接查看请求。
(如果参数是可选的,请将类型设为可为空:int? commentId
。)
答案 1 :(得分:1)
如果您正在使用ASP.NET MVC,那么对Action的签名进行简单更新将获得您需要的值。
public ActionResult EditReply(int TopicId, int CommentId)
{
Topic topic = db.Topics.Find(TopicId);
Comment comment = topic.Comments.Find(x => x.Id == CommentId);
return View(comment);
}
这将使用内置于MVC的默认模型绑定。