1

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

4

3 回答 3

6

您可以像这样重定向到另一个 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();
    }
}
于 2013-11-03T15:01:21.733 回答
1

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

另外,“Response.Redirect(”刚刚开始重定向——在它调用之后不会执行任何代码它会抛出 ThreadAbortException

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

但。如果您真的想要代码中的任何“失真”,您可以:

  1. 将返回值设为“对象”并返回带有重定向 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();
}
于 2013-11-03T15:14:12.347 回答
1

问题是:您完全可以这样做,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

于 2013-11-03T15:23:21.590 回答