Предоставленный вами фрагмент кода не будет компилироваться. Вы должны вернуть результат из всех путей кода. Попробуйте что-то вроде этого:
public ActionResult Visit()
{
int visit = 0;
if (base.IsLoggedIn() == true)
{
visit++;
return PartialView();
}
else
{
return RedirectToAction("ACTION_NAME_GOES_HERE");
}
}
UPDATE:
Полагаю, теперь я понимаю, чего вы пытаетесь достичь. В случае, если запрос 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, а это не то, что вам нужно в этом случае. См. Сообщение в блоге Фила Хаака, в котором объясняется, как можно предотвратить такое поведение ASP.NET, а также можно вернуть несанкционированный ответ 401:
http://haacked.com/archive/2011/10/04/prevent-forms-authentication-login-page-redirect-when-you-donrsquot-want.aspx
Затем, если вы используете 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';
}
}
});