我如何将参数从视图传递给控制器

本文关键字:控制器 视图 参数 | 更新日期: 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。

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

  1. 将您的参数名称更改为id,以便现有路由将按照需要映射该参数。
  2. 添加一条路由,允许MVC路由将传递的值映射到一个名为meetingId的变量
  3. 将参数作为查询字符串样式的参数传递,如/ChooseMeeting/GetMeeting/?meetingId=3

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

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

对不起,耽误你时间了。

欢呼,瑞安