طلب واضح. قيمة القيمة بعد تسجيل الدخول () دون إعادة التوجيه ()
-
06-09-2019 - |
سؤال
أنا أكتب وحدة تحكم إدارة الحساب وعليها معالجة حذف حساب المستخدم الخاص بشكل منفصل:
[Authorize]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Delete(string userName, string confirmButton)
{
MembershipService.DeleteUser(userName);
if (User.Identity.Name.Equals(userName,
StringComparison.InvariantCultureIgnoreCase))
{
FormsAuth.SignOut();
return View("DeleteSelf");
}
else
return RedirectToAction("Index");
}
لكن عرض جزئي logonusercontrol.ascx لا يزال يظهر اسم المستخدم الذي قمت بتسجيل الخروج فقط أثناء عرض عرض DeleteSelf نظرا لطلب.IsAuthenticated و Page.User.Intity. لا تزال قيمها.
إضافة إجراء عمل جديد يمكن أن يحل المشكلة، لكنني لا أحب هذا الحل:
...
{
FormsAuth.SignOut();
return RedirectToAction("ShowDeleteSelfMessage");
}
...
public ActionResult ShowDeleteSelfMessage()
{
return View("DeleteSelf");
}
أي أفكار أخرى؟ شكرا لك!
المحلول
قم بتغيير logonusercontrol.ascx للتعامل مع viewdata ["userdeleted"]:
[Authorize]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Delete(string userName, string confirmButton)
{
MembershipService.DeleteUser(userName);
if (User.Identity.Name.Equals(userName,
StringComparison.InvariantCultureIgnoreCase))
{
FormsAuth.SignOut();
// ***
ViewData["UserDeleted"] = true;
// ***
return View("DeleteSelf");
}
else
return RedirectToAction("Index");
}
logonusercontrol.ascx:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<% if (Request.IsAuthenticated && !(ViewData["UserDeleted"] ?? false)) { %>
Welcome <b><%= Html.Encode(Page.User.Identity.Name) %></b>!
[ <%= Html.ActionLink("Log Off", "LogOff", "Account") %> ]
<% } else { %>
[ <%= Html.ActionLink("Log On", "LogOn", "Account") %> ]
<% } %>
نصائح أخرى
في Delete
العمل، بدلا من return View("DeleteSelf")
, ، جرب هذا return Redirect("DeleteSelf")
لقد فحصت شفرة المصدر في ملف AccountController.cs القياسي ووجدت طريقتين
public ActionResult ChangePasswordSuccess()
{
return View("ChangePasswordSuccess");
}
و
public ActionResult RestorePasswordSuccess()
{
return View("RestorePasswordSuccess");
}
التي تظهر فقط مناظر المقابلة. كذلك انا
public ActionResult ShowDeleteSelfMessage()
{
return View("DeleteSelf");
}
سوف تبدو طريقة جيدة في مثل هذه الشركة. على الرغم من أنني يجب أن أغير اسم الاتساق.