Signout function on button click event in MVC3 in entity framework

1.6k views Asked by At

I'm using mvc3 with razor I have a button for signout a user, I use the following code shared/_layout.cshtml

      //button
     <div class="button"><a href="#" id="Logout" title="Logout">


          <div class="Logout"></div>Logout</a></div>
    <script>
          $("#Logout").bind("click", function () {
window.location.href = '@Url.Action("LogOn", "Account")'; 
});
    </script>

accountcontroller.cs

 public ActionResult Logout()
        {
          FormsAuthentication.SignOut();
          return RedirectToAction("LogOn");
        }

This directs me to a error page

http://localhost:XXXX/%3C%=%20Url.Action(%22Logout%22,%20%22Account%22)%20%%3E

Server Error in '/' Application.

HTTP Error 400 - Bad Request.

Version Information: ASP.NET Development Server 11.0.0.0

can anyone tell me where I'm going wrong? Please help for button click event to make signout changes.

Updated:

 http://localhost:8436/&#47;Account&#47;Logout


enter code here
Server Error in '/' Application.

A potentially dangerous Request.Path value was detected from the client (&).

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Web.HttpException: A potentially dangerous Request.Path value was detected from the client (&).

Source Error: 

    An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

    Stack Trace: 


    [HttpException (0x80004005): A potentially dangerous Request.Path value was detected from the client (&).]
       System.Web.HttpRequest.ValidateInputIfRequiredByConfig() +9673044
       System.Web.ValidateRequestExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +35
       System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155
2

There are 2 answers

1
Kane On

The Razor syntax uses and @ character instead of <%, so use this and everything should work fine

$("#Logout").bind("click", function () { 
    window.location.href = '@Url.Action("LogOn", "Account")'; // assuming this is the correct action you want to use for the logout button
});

You might also want to switch from jQuery $("#Logout").bind to $("#Logout").click

0
Nitin Varpe On

Why don't you try ajax jquery call

<a href="#" id="Logout" onclick=="return LogOut();" title="Logout">

function LogOut() {
$.ajax({
                            cache:true,
                            type: "POST",
                            url: "@(Url.Action("LogOut", "Account"))",
                            success: function (data) {
                                                window.location.reload();
                                             },
                            error:function (xhr, ajaxOptions, thrownError){

                                              }, 
                            complete: function() {   } 

                           }); // end ajax code
                   }

This might look lengthy way but should work!