如何从View中将参数传递给Controller

时间:2013-03-23 01:17:30

标签: c# asp.net-mvc razor

我对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。

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

3 个答案:

答案 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种方法可以解决这个问题:

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

答案 2 :(得分:0)

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

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

抱歉浪费时间。

干杯, 莱恩