您好我正在尝试使用PartialViewResult方法在某个条件不是页面时重定向页面。但我无法做到。我的代码如下:
public PartialViewResult Visit()
{
int visit = 0;
if (base.IsLoggedIn() == true)
{
visit++;
}
else
{
// toDO redirect to home/index page
}
}
答案 0 :(得分:5)
您提供的代码段无法编译。您必须从所有代码路径返回结果。尝试这样的事情:
public ActionResult Visit()
{
int visit = 0;
if (base.IsLoggedIn() == true)
{
visit++;
return PartialView();
}
else
{
return RedirectToAction("ACTION_NAME_GOES_HERE");
}
}
<强>更新强>
我相信我现在明白你想要完成的事情。如果未登录的用户发出ajax请求,您希望浏览器重定向用户。我建议修改你的动作方法如下:
public ActionResult Visit()
{
int visit = 0;
if (base.IsLoggedIn())
{
visit++;
// whatever else needs to be done
return PartialView();
}
else
{
// Note that this could be done using the Authorize ActionFilter, using
// an overriden Authorize ActionFilter, or by overriding OnAuthorize().
if (!base.IsLoggedIn())
return new HttpUnauthorizedResult();
}
}
假设您已在web.config中配置,响应将是302重定向,这不是您在此方案中所需的。请参阅Phil Haack的博客文章,其中解释了如何防止此ASP.NET行为并返回401 Unauthorized响应:
然后,假设您正在使用jQuery发出AJAX请求,您可以处理401响应:
$.ajax({
url: '/your_controller/visit',
type: 'GET',
statusCode: {
200: function (data) {
// data = your partialview
},
401: function (data) {
location.href = '/the_path/to_redirect/to';
}
}
});
答案 1 :(得分:2)
我不确定我是否完全理解这个问题,但这可能对某些人有所帮助。
else
{
Response.Redirect("~/default.aspx");
return null;
}
答案 2 :(得分:0)
您应该考虑使用OnActionExecuting或类似视图,而不是使用局部视图,因为这种常见逻辑不属于视图/控制器。例如:
[AttributeUsage(AttributeTargets.All)]
public sealed class RecordLoggedInCountAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.User.Identity.IsAuthenticated)
{
visit++;
}
else
{
filterContext.HttpContext.Response.Redirect("http://google.com");
}
}
}
然后使用[RecordLoggedInCount]
答案 3 :(得分:-2)
else
{
return RedirectToAction("Index.aspx");
}