有没有办法像在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();
}
}
我想返回类似
的内容,而不是返回nullreturn Response.Redirect("~bills/create
但这不起作用,它给了我一条不会消失的红色线条。这是VS2012 ASP.net WebForms项目
答案 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。
此外,在应用程序结构中看起来似乎不正确。
但是。如果您真的想在代码中出现任何类型的“失真”,您可以:
将返回值设为'object'并返回带有重定向url的字符串。在调用者中,只需检查if(结果是字符串),然后使用该字符串重定向。
添加一些ref参数,如(...,ref Action a),然后定义如下:
a = () =>
{
Response.Redirect("...");
};
然后,调用者将检查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