【问题标题】:ASP.NET MVC 2.0: How to read querystring valueASP.NET MVC 2.0:如何读取查询字符串值
【发布时间】:2010-05-25 15:23:31
【问题描述】:

我正在尝试构建一个小型 ASP.NET MVC 2 应用程序。我有一个控制器类,其中包含以下方法

  public ActionResult Index()
    {
        TestMvc.Models.PersonalInformation objPerson = new TestMvc.Models.PersonalInformation();
        objPerson.FirstName = "Shyju";
        objPerson.LastName = "K";
        objPerson.EmailId="shyju@company.com";
        return View(objPerson);
    }

当页面(视图)被调用时,我可以在那里看到这些数据,因为我的视图显示了这些数据。现在我想知道如何在 url 中传递查询字符串并使用该 id 来构建 PersonalInformation 对象。我可以读取查询字符串值吗?在哪里阅读?

我希望 questrtstring 像 http://www.sitename/user/4234 其中 4234 是用户 ID

【问题讨论】:

  • 如果您确实需要使用查询字符串提交一些数据,您必须将表单操作更改为“获取”(而不是发布)。在公共 ActionResult Index() 上,您可以验证 Request.QueryString["YourField"] != null 是否。但我更喜欢在您的场景中使用 RouteData.Values

标签: asp.net-mvc-2 query-string


【解决方案1】:

http://www.sitename/user/4234 不是查询字符串。查询字符串是 URL 中 ? 之后的部分,如 http://www.sitename/user?userId=42

但是,MVC 项目模板附带的默认路由应该允许您简单地将操作方法​​的签名更改为

public ActionResult Index(int id)

你应该得到想要的结果。如果你想完全控制你的 URL,你应该研究路由在 MVC 中是如何工作的。

另外,请注意 index 操作通常用于显示所有对象的列表,因此您可能需要 Details 操作来显示 1 个用户对象。

【讨论】:

  • @Shyju:在 Jonas 样本 4234 可以通过使用 RouteData.Values["Id"] 获得
【解决方案2】:

您想要修改您的操作以接受这样的 id:

public ActionResult Index(string id)
{
  TestMvc.Models.PersonalInformation objPerson = new TestMvc.Models.PersonalInformation();
  if (!string.isNullOrEmpty(id))
  {
    objPerson = getPerson(id);
  }

  return View(objPerson);
}

然后将路由添加到您的 global.asax:

routes.MapRoute(
  "MyRoute",                                              // Route name
  "user/{id}",                           // URL with parameters
  new { controller = "mycontroller", action = "index", id = ""}  // Parameter defaults
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多