从URL获取评论ID

时间:2017-12-11 11:33:01

标签: asp.net-mvc web

我正在使用带有用户登录的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的新手。任何形式的输入将不胜感激。 谢谢!

2 个答案:

答案 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的默认模型绑定。