我如何将参数从视图传递给控制器
本文关键字:控制器 视图 参数 | 更新日期: 2023-09-27 18:05:19
我对MVC样式的页面很陌生,但学习速度很慢。我想要能够点击一个actionlink,然后将参数传递给我的控制器,它将使用它从数据库中获取一些东西,但我已经尝试了许多不同的东西和控制器只给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。
任何帮助将是感激的,谢谢瑞安
出乎意料,我认为你的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();
}
}
您很可能没有定义将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。
至少有三种方法可以解决这个问题:
- 将您的参数名称更改为
id
,以便现有路由将按照需要映射该参数。 - 添加一条路由,允许MVC路由将传递的值映射到一个名为
meetingId
的变量 - 将参数作为查询字符串样式的参数传递,如
/ChooseMeeting/GetMeeting/?meetingId=3
doh!我解决了,问题是,我为ActionLink调用了错误的重载。它应该是:
@Html.ActionLink(Model.Name, "GetMeeting", "ChooseMeeting",new {meetingid = Model.MeetingId},null)
对不起,耽误你时间了。
欢呼,瑞安