【发布时间】:2011-03-27 05:50:05
【问题描述】:
我的网站有一个类似于 Skype 的概念,它允许用户“在线”和“离线”。我创建了一个允许用户切换模式的局部视图:
@if (Convert.ToBoolean(ViewData["IsLogged"].ToString()))
{
<div id="onlineStatus">
You are currently <strong>ONLINE</strong> >>
@Html.ActionLink("Go OFFLINE", "GoOffline", "Account")
</div>
}
else
{
<div id="offlineStatus">
Ready for business >>
@Html.ActionLink("Go ONLINE", "GoOnline", "Account")
</div>
}
这是我们加载局部视图的方式:
public ActionResult OnlineStatusCtrl()
{
if (SiteUser.IsAuthenticated)
ViewData["IsLogged"] = SiteUser.IsOnline.ToString();
return PartialView("OnlineStatusCtrl");
}
当用户点击“Go ONLINE”或“Go OFFLINE”链接时,Controller 会响应:
public ActionResult GoOnline()
{
if (SiteUser.IsAuthenticated)
SiteUser.GoOnline();
ViewData["IsLogged"] = "True";
return RedirectToAction("Index", "Home");
//return PartialView("OnlineStatusCtrl");
//return EmptyResult();
}
public ActionResult GoOffline()
{
if (SiteUser.IsAuthenticated)
SiteUser.GoOffline(true);
ViewData["IsLogged"] = "False";
return RedirectToAction("Index", "Home");
}
这很好用……但唯一的问题是,如果我在 View XXXX 上,然后单击“Go Online”,控制器会将我重定向到索引视图。
我尝试了“return EmptyResult()”或“return PartialView("OnlineStatusCtrl"),但它不起作用。
从代码可以看出PartialView唯一关心的是“ViewData['IsLogged']值”
问题: 有什么方法可以刷新部分视图而无需刷新整个页面或重定向到主页?
这可能是放置一个 Html.Beginform() 的问题吗? 是否可能是控制器返回的问题只是刷新了 PartialView 的内容,而与持有 PV 本身的视图无关?
Aiaiaiaia 我仍然无法弄清楚 MVC 如何与 PartialViews 一起工作/
非常感谢
...在高级
更新 我已经按照 x 的建议更新了代码,HTML 输出如下:
<div id="divStatus">
<form action="/" data-ajax="true" data-ajax-mode="replace" data-ajax-update="#divStatus" id="form0" method="post">
<div id="offlineStatus">
Ready for business >>
<a href="/Account/GoOnline">Go Online</a>
</div>
</form>
</div>
当我点击 LINK 时,控制器 return PartialView("_OnlineStatusCtrl"); 是调用 PV 的名称 ...并且 ENTIRE PAGE 被替换。
【问题讨论】:
标签: asp.net-mvc-3 c#-4.0