我收到错误“并非所有路径返回值”,我完全理解为什么。
如您所见,我想重定向此人未登录,显然没有返回视图。
我确定我错了。我该怎么做呢?
public ActionResult Confirmation (Order Order) {
if (Session["CompanyID"] == null)
{
string url = Request.Url.Host;
if (Request.Url.Port != null)
{
url = url + Request.Url.Port;
}
url = url + "/signin.asp";
Response.Redirect(url);
}
else
{
int userID = (int)Session["CompanyID"];
Corp_User User = Repository.CorpUserDetails(userID);
return View(new OrderLocation { Order = Order, Location = WhygoRepository.RoomDetails(Order.roomId).First(), Corp_User = User });
}
}
请注意,我需要重定向到经典的ASP页面,而不是MVC操作..
答案 0 :(得分:4)
您必须返回ActionResult。使用“RedirectToAction”。
public ActionResult Confirmation(Order Order)
{
if (Session["CompanyID"] == null)
{
string url = Request.Url.Host;
if (Request.Url.Port != null)
{
url = url + Request.Url.Port;
}
url = url + "/signin.asp";
return RedirectToAction(<YOUR ACTION>);
}
else
{
int userID = (int)Session["CompanyID"];
Corp_User User = Repository.CorpUserDetails(userID);
return View(new OrderLocation { Order = Order, Location = WhygoRepository.RoomDetails(Order.roomId).First(), Corp_User = User });
}
}
答案 1 :(得分:3)
您可以返回RedirectResult - http://msdn.microsoft.com/en-us/library/system.web.mvc.redirectresult.aspx
答案 2 :(得分:0)
嗯,实际上这是一个很好的问题。请参阅dknaack在您的特定情况下找到解决方案的答案,但在其他情况下,我们可能不会那么幸运。
从技术上讲,这种情况非常符合逻辑。重定向只是打开一个新请求,并让当前请求很好地处理自己或强制关闭自己。在所有情况下,当前方法都需要返回值。如果Redirect让当前进程处理得很好意味着你应该有一个有意义的返回值。
我认为一种解决方案是在重定向后抛出一个特定的异常。类似的东西:
public string GetCurrentUserName()
{
if (!authenticated)
{
Response.Redirect(LoginScreen);
throw new UnresolvedMethodException();
}
else
{
return UserName;
}
}
返回NULL是一个我不会放钱的选项,因为NULL也可能意味着没有UserName Set(在上面的例子中,用户可能使用他的电子邮件登录,使用户名可选)。
答案 3 :(得分:-2)
只需将return null;
放在Response.Redirect(url);
下面它永远不会真正到达该位置,但它将摆脱编译器错误。
答案 4 :(得分:-3)
你可以返回null并检查它。
编辑:我想快点,不理我:P