1

我对 MVC 样式的页面很陌生,但学习缓慢。我希望能够单击一个动作链接,然后将一个参数传递给我的控制器,该控制器将使用它从数据库中获取一些东西,但是我尝试了许多不同的东西,并且控制器只被赋予 null 作为参数.

在我看来,我已经构建了我的操作链接,如下所示:

@Html.ActionLink(Model.Name, "GetMeeting", "ChooseMeeting", null, new {meetingid = Model.MeetingId})

在我处理此请求的控制器中如下:

public ActionResult GetMeeting(string meetingid)
    {
        var races = RaceRepository.GetRacesInMeeting(new Meeting() {MeetingId = new Guid(meetingid)});
        return View(races);
    }

meetingID 始终为空,有人可以帮我解决这个问题,让我知道如何给它我想要的参数。此外,我已经检查并在视图中,Model.MeetingID 填充了它应该是的 ID。

任何帮助将不胜感激,谢谢瑞恩

4

3 回答 3

2

刚出局,我认为您的 null 可能在错误的位置。假设 Model.name 只是文本,“GetMeeting”是一个动作名称,“ChooseMeeting”是一个控制器名称试试这样

@Html.ActionLink(Model.Name, "GetMeeting", "ChooseMeeting", new {meetingid = Model.MeetingId}, null)

你的行为会是这样的

public class ChooseMeeting : Controller
{
    public ActionResult GetMeeting(int meetingid)
    {
        // ...
        return View();
    }
}
于 2013-03-23T01:29:59.647 回答
0

您很可能尚未定义将 meetingId 作为可识别参数传递的路由。

您打算将 ActionLink 解析为以下内容(3 是 meetingId 的值)。

/ChooseMeeting/GetMeeting/3

实际路由的可能是这样的:

/ChooseMeeting/GetMeeting

这是由于单个默认 MVC 路由的定义与此非常相似:

  routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Request", action = "Index", id = UrlParameter.Optional } 
  );

这里的问题是参数名称默认为“id”,您已将参数命名为 meetingId。

至少有3种方法可以解决这个问题:

  1. 将参数的名称更改为,id以便现有路由将根据需要映射参数。
  2. 添加一个路由,允许 MVC 路由将传递的值映射到名为meetingId.
  3. 将参数作为查询字符串样式参数传递,例如/ChooseMeeting/GetMeeting/?meetingId=3
于 2013-03-23T01:32:01.297 回答
0

哦!我解决了,问题是,我为 ActionLink 调用了错误的重载。它应该是:

@Html.ActionLink(Model.Name, "GetMeeting", "ChooseMeeting",new {meetingid = Model.MeetingId},null)

很抱歉浪费了时间。

干杯,瑞恩

于 2013-03-23T01:32:28.157 回答