我正在开发一个 asp.net MVC3 应用程序。
我有一个LiveFeedController
with 方法,它根据用户选择的选项返回项目列表。它根据请求是否为 ajax 请求返回完整视图或部分视图。
例如:
Public Class LiveFeedController
Inherits System.Web.Mvc.Controller
<Authorize(Roles:="CanViewFeed")>
Function Feed(Optional ByVal feedID As Nullable(Of Guid) = Nothing, Optional ByVal itemID As Nullable(Of Guid) = Nothing, Optional ByVal refreshTimer As Double = 0.0) As ActionResult
Dim feedVM As New FeedViewModel
feedVM.SelectedFeedID = feedID
feedVM.SelectedItemID = itemID
feedVM.RefreshTimer = refreshTimer
Return View(feedVM)
End Function
<Authorize(Roles:="CanViewFeed")>
<HttpPost()>
Function Feed(ByVal collection As FormCollection) As ActionResult
Dim feedVM As New FeedViewModel
TryUpdateModel(feedVM , collection)
If Request.IsAjaxRequest Then
Return PartialView("PartialFeed", feedVM)
End If
Return View(feedVM)
End Function
我的问题是,如果向HttpPost方法提交了ajax请求,并且用户不再登录(所以Authorize失败),返回的内容就是我在web.config文件中指定的登录页面:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
这显示在我的页面/视图的动态部分中,但它使 html 无效,因为返回的内容是登录页面的完整视图。
我也想避免这个问题并正确显示登录页面的内容。我怎样才能做到这一点?
谢谢,
-弗林尼