【问题标题】:ASP.Net MVC Routing URL QueryStringASP.Net MVC 路由 URL 查询字符串
【发布时间】:2008-12-19 17:16:41
【问题描述】:

有没有办法链接到另一个显示搜索结果的视图而无需使用查询字符串?例如,我知道我可以做到以下几点:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(string txtOrderNumber)
{
    return RedirectToAction("OrderLookup", new { controller = "Report", id = txtOrderNumber });            
}

但是,假设我只想使用超链接(带有订单号的超链接)而不是表单帖子。如何在不使用查询字符串的情况下路由到结果视图?非常感谢。

【问题讨论】:

    标签: asp.net-mvc model-view-controller url routing query-string


    【解决方案1】:

    将 txtOrderNumber 参数重命名为 id。然后它将被默认路由拾取。或者,在与默认路由中的 id 值相同的位置引入一个名为 txtOrderNumber 的新路由,并将其限制为仅响应此控制器。

    【讨论】:

    • 谢谢克雷格。但这不会仍然出现在路线中吗?基本上我不希望订单号出现在 URL 中的任何位置。
    • 如果您不希望搜索字符串来自 URL、查询字符串参数或表单字段,您希望从哪里获取它?
    • 我想这就是问题所在。例如,对于 WebForms,您可以使用 CommandArguement 等。我只是想确保我没有遗漏任何东西。我正在转换一个使用链接按钮但未在 URL 中显示值的 WebForm 应用程序。但听起来这对于 MVC 来说可能是不可能的。
    • 嗯,MVC 可以使用与 WebForms 相同的机制。 WebForms 在后台使用了一个表单域。如果您愿意(并且从问题的外观来看已经拥有),您也可以这样做。您可以使用 JavaScript 从链接(而不是按钮)发布。
    【解决方案2】:

    埃里克,

    对于 webforms,命令参数是通过发布帖子传递的,并且值存储在控件中(我相信存储在隐藏字段或也是隐藏字段的视图状态中),但页面确实回发。

    如果您不想发帖并且不使用查询字符串,我能想到的唯一解决方案是让您在同一页面上发帖,捕获 id 并将其存储在 TempData 中,然后执行一个重定向动作。在控制器中只需使用上一页中存储的 TempData 值。

    这仍然会生成一个帖子,但如果用户刷新页面,他们将不会看到“重新发送数据”消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-19
      • 1970-01-01
      • 1970-01-01
      • 2020-12-28
      • 2010-11-01
      • 1970-01-01
      • 2012-04-01
      • 1970-01-01
      相关资源
      最近更新 更多