ASP.Net 4.5 WebForms返回重定向到URL

时间:2013-11-03 14:52:36

标签: asp.net webforms

有没有办法像在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项目

3 个答案:

答案 0 :(得分:2)

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

Response.Redirect("mypage.aspx");

您最终需要提供带有.aspx扩展名的网页名称,而不像您需要提供网址的MVC那样。

已编辑:

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();
    }
}

答案 1 :(得分:1)

你的问题不是很清楚。我不确定你如何期望返回List以外的东西(因为方法的返回类型是这样定义的)。

另外,“Response.Redirect(”只是开始重定向 - 调用后不会执行任何代码It throws ThreadAbortException

此外,在应用程序结构中看起来似乎不正确。

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

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

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

    a = () =>
    {
        Response.Redirect("...");
    };
    
  3. 然后,调用者将检查ref值是否为null并调用它:

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

答案 2 :(得分:1)

问题是:你完全能够Response.Redirect(),因为那是* .aspx文件的代码隐藏,但是你处于一个没有实现System.Web.UI.Page的分离的类中

因此,在一个单独的类中,你会以这种方式重定向

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

请注意,这不是MVC,所以你想要“~bike / create.aspx”。如果你想隐藏扩展名,你应该寻找:http://www.iis.net/downloads/microsoft/url-rewrite