طلب واضح. قيمة القيمة بعد تسجيل الدخول () دون إعادة التوجيه ()

StackOverflow https://stackoverflow.com/questions/938764

سؤال

أنا أكتب وحدة تحكم إدارة الحساب وعليها معالجة حذف حساب المستخدم الخاص بشكل منفصل:

[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");
}

سوف تبدو طريقة جيدة في مثل هذه الشركة. على الرغم من أنني يجب أن أغير اسم الاتساق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top