【问题标题】:ASP.Net 4.5 WebForms Return Redirect to URLASP.Net 4.5 WebForms 返回重定向到 URL
【发布时间】:2013-11-03 14:52:35
【问题描述】:

有没有办法像在 MVC 中一样在 WebForms 中返回重定向到 URL。我有一个简单的函数,如果列表为空,则返回 null,如果列表中有项目,则返回列表。如果列表为空,我希望能够重定向到同一网站中的另一个页面。

这里是函数

BillContext _context = new BillContext();

public List<Models.Bill> GetBills()
{
    var bills = from b in _context.Bills
                where b.UserName == HttpContext.Current.User.Identity.Name
                select b;

    if (bills.ToList().Count() < 1)
    {
        return null;
    }
    else
    {
        return bills.ToList();
    }
}

我想返回这样的东西,而不是返回 null

return Response.Redirect("~bills/create

但这不起作用,它给了我一条不会消失的红色波浪线。这是 VS2012 ASP.net WebForms 项目

【问题讨论】:

  • 此代码是否与 ASP.NET 应用程序在同一个项目中?如果是这样,你完全有能力做到这一点。你忘了'");'在语法的末尾?尝试构建并向我们展示确切的错误
  • 页面在同一个应用程序中,这里是错误消息 Error 1 The name 'Response' does not exist in the current context"
  • 你有没有“使用 System.Web;”在 *.cs 的顶部?如果是 ASP.NET 应用程序,它应该会自动出现,但请仔细检查。另外,这是“.aspx”文件的“.cs”吗?
  • 我有“使用 Systems.Web”,这是一个 .cs 文件,它不是页面背后的代码,它是我添加到项目中的 .cs 文件。
  • Response.Redirect 在单独的类中不起作用,我做了一个答案来展示您如何在单独的类中重定向

标签: asp.net webforms


【解决方案1】:

您可以像这样重定向到另一个 aspx 页面

Response.Redirect("mypage.aspx");

您需要在末尾提供带有 .aspx 扩展名的页面名称,这与在 MVC 中需要提供 URL 的情况不同。

已编辑:

public List<Models.Bill> GetBills()
{
    var bills = from b in _context.Bills
                where b.UserName == HttpContext.Current.User.Identity.Name
                select b;

    if (bills.ToList().Count() < 1)
    {
        HttpContext.Current.Response.Redirect("mypage.aspx");
        return null;
    }
    else
    {
        return bills.ToList();
    }
}

【讨论】:

  • 谢谢,我更新它返回 Response.Redirect("CreateBill.aspx");但它仍然不像“响应”我不知道是否有我需要导入的命名空间
  • 是的,他说的是编译时间。
  • 试试HttpContext.Current.Response.Redirect("mypage.aspx);而不是Response.Redirect("mypage.aspx");
  • 我想就是这样,我遇到了另一种错误,所以我考虑了这个进展。现在我得到“无法将类型'void'隐式转换为'System.Collections.Generic.List'”我会解决这个问题,但我认为我越来越接近了。非常感谢
  • 它给出了这样的错误,因为您必须在Response.Redirect 行之后提及return null;
【解决方案2】:

问题是:你完全可以做到Response.Redirect(),因为那是 *.aspx 文件的代码隐藏,但你在一个不实现 System.Web.UI.Page 的单独类中

所以,在一个单独的类中,你确实以这种方式重定向

HttpContext.Current.Response.Redirect("~bills/create");

请注意,这不是 MVC,因此您可能需要“~bills/create.aspx”。如果你想隐藏扩展,你应该寻找:http://www.iis.net/downloads/microsoft/url-rewrite

【讨论】:

    【解决方案3】:

    你的问题不是很清楚。我不确定您希望如何返回 List 以外的其他内容(因为方法的返回类型是这样定义的)。

    另外,"Response.Redirect(" 刚刚开始重定向——调用后不会执行任何代码It throws ThreadAbortException

    此外,这在应用程序结构中看起来根本不是正确的方法。

    但是。如果您真的想在代码中添加任何类型的“失真”,您可以:

    1. 将返回值设为 'object' 并返回带有重定向 url 的字符串。在调用者中,只需检查 if(result is string) 然后使用该字符串重定向。

    2. 添加一些 ref 参数,例如 (... , ref Action a) 然后定义如下:

      a = () =>
      {
          Response.Redirect("...");
      };
      

    然后,调用者会检查 ref 值是否为 null 并调用它:

    Action actionToCallAfterIfExists = null;
    GetBills(ref actionToCallAfterIfExists);
    
    if(actionToCallAfterIfExists != null)
    {
        actionToCallAfterIfExists();
    }
    

    【讨论】:

    • 谢谢@Agat 我应该有资格成为一名初级开发人员,所以我承认我的方法可能不够。我所做的只是创建一个我传递给 ASP.net ObjectDataSource 的数据访问类/方法。
    • 好吧,如果你试图实现一些数据服务(数据层)(作为单独的类库),那么你绝对不能直接从那里调用像 Response.Redirect 这样的东西(即使你可以添加对 System.Web 的引用)!!!甚至不要在该库的方法中提及要重定向到的页面!
    猜你喜欢
    • 2011-01-27
    • 1970-01-01
    • 2015-01-20
    • 2010-11-01
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 2016-01-15
    相关资源
    最近更新 更多