【问题标题】:MVC Redirect from a ViewResult where cannot change to ActionResult从无法更改为 ActionResult 的 ViewResult 的 MVC 重定向
【发布时间】:2012-08-07 22:32:20
【问题描述】:

我想从ViewResult 重定向,这样当搜索结果是1 而不是产品列表页面时,我可以显示特定的产品详细信息。

据说其他页面将ViewResult 更改为ActionResult 并使用RedirectToAction。但我的问题是我的控制器继承自第三方控件,并且我的搜索方法设置为覆盖相同的第三方控件方法,即ViewResult

我想知道是否有人对我可以做什么有一些建议,是否有另一种方法可以从 ViewResult 重定向,或者是否有另一种方法可以处理将第三方控件搜索方法覆盖为 @ 987654329@.

【问题讨论】:

标签: asp.net-mvc redirect viewresult


【解决方案1】:

如果您无法更改操作的返回类型,则可以使用路由将带有 1 的请求路由到不同的操作。

只需定义另一条路由并确保将其添加到RouteCollection默认路由之前。

【讨论】:

    【解决方案2】:

    可以只返回一个不同的视图(没有重定向)

    //in your action method
    if( result.Count == 1 )
        return View( "Product", result[0] );
    

    或直接调用其他操作方法(如果它们在同一个控制器中)

    if( result.Count == 1 )
        return YourActionDetails( result[0].Id /* params */ );
    

    或者,您可以返回一个简单的视图,使客户端自动重定向

    // a "Redirect" view
    @model Product
    <html>
        <head>
         <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
         <meta http-equiv="Refresh" content="0;url=@Url.Action("Details", Model.Id)" />
        </head>
        <body></body>
    </html>
    

    【讨论】:

    • 感谢您的回复。不幸的是,详细信息页面返回的操作结果也设置为覆盖。我可能会考虑最后一个选项。
    猜你喜欢
    • 1970-01-01
    • 2016-05-04
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 2013-02-26
    • 2012-12-02
    相关资源
    最近更新 更多