【问题标题】:How can I pass a parameter to my Controller from my View如何从我的视图将参数传递给我的控制器
【发布时间】:2013-03-23 01:17:30
【问题描述】:

我对 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);
    }

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

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

【问题讨论】:

  • 一般来说,控制器从不直接联系视图,它通过模型传回信息。
  • @DanielA.White 这是我正在构建的赛马应用程序的一部分,races 是List<Race>

标签: c# asp.net-mvc razor


【解决方案1】:

刚开始,我认为您的 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();
    }
}

【讨论】:

  • 我的示例中的最后一个 null 用于 HtmlAttributes,而新对象用于路由值,看起来你把它们弄错了。
  • 我刚刚重新阅读了这个问题,看起来meetingid 是一个字符串。这也有效,类型变化很大 - 使用适合您的。
  • 谢谢,这正是我做错的。我没有正确阅读重载。
  • 这种情况尤其发生在有很多重载的情况下,很好,你把它排序了!
【解决方案2】:

您很可能没有定义将 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

【讨论】:

    【解决方案3】:

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

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

    抱歉浪费了时间。

    干杯, 瑞恩

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-17
      • 1970-01-01
      • 2020-01-26
      • 2015-03-16
      • 2019-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多