我对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始终为null,有人可以帮助我,让我知道如何给它我想要的参数。此外,我已经检查过,在视图中,Model.MeetingID会填充它应该是的ID。
任何帮助将不胜感激, 谢谢 莱恩
答案 0 :(得分: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();
}
}
答案 1 :(得分: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种方法可以解决这个问题:
id
,以便现有路径根据需要映射参数。meetingId
的变量的路由。/ChooseMeeting/GetMeeting/?meetingId=3
答案 2 :(得分:0)
DOH!我解决了问题,我正在为ActionLink调用错误的重载。应该是:
@Html.ActionLink(Model.Name, "GetMeeting", "ChooseMeeting",new {meetingid = Model.MeetingId},null)
抱歉浪费时间。
干杯, 莱恩