如何使用jquery清除会话?

时间:2014-07-02 13:04:28

标签: jquery asp.net-mvc

我正在开发mvc应用程序。我在视图和控制器中使用了session。  首先,我从下拉列表中选择值。选定的值在视图和控制器中管理。 但是当我再次从下拉列表中选择值时,那个时候我想要清除会话。

下面是我的视图代码

@model IEnumerable<StockWatch.DTO.ProductDTO>

@using GridMvc.Html
@using System.Web.UI.WebControls;

@{
    ViewBag.Title = "Index";
    int VendorId = Convert.ToInt32(Session["vendorId"]);
}

<!DOCTYPE html>

<html>
    <head>
         <link href="@Url.Content("~/Content/Custom1.css")" rel="stylesheet" type="text/css" />    
   </head>
<body> 

     @if (Model == null)
     {

    <div id="vendorDropdownDiv" class =" row-fluid Span9" style ="margin-bottom :15px">

                   <div class="span6"  >
                           <div class="span4" style="margin-left:35px;" >
                         <label >Vendor</label>
                    </div>
                    <div class="span6" >
                      @Html.DropDownList("VendorId", ViewData["list"] as SelectList, "-- Select vendor --", new { @id = "vendorDropdown", @name = "VendorId" })

                  </div>
                 </div>                              

                 <div class="span11" style="text-align:right">           
                <input class="btn btn-primary" type="submit" value="Create" id="create"/>
                 <input class="btn btn-default" value="Cancel" style="width:45px;" onclick="window.location.href='@Url.Action("index")    '"/>
           </div>
              </div> 
     }    

  <div id="indexview"></div>

     @if (Model != null)
     {
    <div id="modeldiv" class="span12" style="margin-left:0px;margin-right:0px;">
       <div class="row-fluid" style="margin-top:30px;margin-bottom:10px;">
       <div class="listheading span9" style="font-size:22px;">Products</div>

      <div class="createlink span3" style="text-align:right;margin-left:10px;">
       @Html.ActionLink("+ Add Product", "Create")
    </div>
  }     
</body>
</html>

<script>
    $(document).ready(function () {      
        $('#vendorDropdown').change(function () {                  
        }); 
    });
</script>

和控制器代码如下

       public ActionResult Index(int VendorId=0)
    {
        if (VendorId == 0)
        {
            VendorId = Convert.ToInt32(Session["vendorId"]);
        }

        VendorService vendorService = new VendorService();
        SelectList SelectList = new SelectList(vendorService.GetAll().OrderBy(t => t.Name), "Id", "Name", VendorId);
        ViewData["list"] = SelectList;

        var Categorylist = new SelectList(new[] { "Dull", "Anodised", "All" });

        ViewData["Categorylist"] = Categorylist;

        if (VendorId != 0 )
        {
            Session["vendorId"] = VendorId;
            ProductService productService = new ProductService();
            var productlist = new List<ProductDTO>();             
            productlist = productService.GetAll().Where(x => x.VendorId == VendorId).ToList();

            return View(productlist );
        }
        else
        {
            return View();
        }
    }

这里是如何使用jquery清除Convert.ToInt32(Session["vendorId"]);此会话。 谢谢你提前

7 个答案:

答案 0 :(得分:3)

会话在服务器上维护,无法在不向服务器发送请求的情况下在客户端上删除。

根据Patrick Hofman的建议,你可以创建一个动作ClearSession并使用$ .ajax或$ .get来调用它。

答案 1 :(得分:1)

由于会话存储在服务器端 - 而不是客户端,因此您需要指示服务器销毁它。 maing对动作方法的请求 可以做到这一点 -

在您的mvc网站中创建一个操作方法 -

public class ControllerName
{
 public ActionResult DestroySession()
 {
     Session = null;
 }
}

然后从页面中调用以下javascript代码:

<script>

$('#clearSessionButton').click(
function() {
    $.ajax('/ControllerName/DestroySession');
});

</script>

答案 2 :(得分:0)

调用$ ajax或$ post方法来清除会话

     $.post("clearsessionAction",function(data){
        //clear your session 
     });

答案 3 :(得分:0)

在您的控制器中创建一个clearabandon会话的操作。您可以使用jQuery ajax调用该操作,您的会话将被清除。

答案 4 :(得分:0)

我知道这可能会迟到,但我希望这会对你有所帮助 首先,在使用会话时需要小心。 更好的方法是创建一个可以完成所有会话的课程 在你需要创建控制器后,它将帮助你从js做你想做的一切。你会得到这样的东西:

public class SessionManager
{
    public static int VendorId
    {
        get { return Convert.ToInt32(HttpContext.Current.Session["vendorId"]); }
    }

    public static void SetVendorId(int id)
    {
        HttpContext.Current.Session["vendorId"] = id; 
    }

    public static void ClearVendorId()
    {
        HttpContext.Current.Session["vendorId"] = null;
    }
}

public class SessionManagerController : Controller
{
    [HttpPost]
    public ActionResult GetVendorId()
    {
        return Json(SessionManager.VendorId);
    }

    [HttpPost]
    public ActionResult SetVendorId(int id)
    {
        try
        {
            SessionManager.SetVendorId(id);
        }
        catch (Exception)
        {
            return Json("false");
        }
        return Json("true");
    }

    [HttpPost]
    public void ClearVendorId()
    {
        SessionManager.ClearVendorId();
    }
}

从客户端调用此方法的方法,您可以自己选择。

顺便说一下,在你看来:

 int VendorId = Convert.ToInt32(Session["vendorId"]);

你将使用:

int VendorId = SessionManager.VendorId

答案 5 :(得分:0)

您好,您可以简单地使用 sessionStorage.clear();localStorage.removeItem(keyname)sessionStorage.removeItem(keyname)

答案 6 :(得分:-1)

您可以将JQUERY与ajax一起使用,如下所示:

1 - 在HTML文件中使用id标记,例如id =“clear_session”。

2 - 在你的js文件中使用“clear_session”点击事件来启动ajax:

var clear_session    = $("#clear_session"); 
clear_session.click(function(){
        $.ajax({
                type: "POST",
                url: "index.php",
                data: "do=clear_session",
                complete: function(data){ 

                        // your desired finishing function

                }           
        });     
});

3 - 在index.php文件中使用此代码:

if ($_POST['do'] == 'clear_session')
{
    // your desired function
}

请回复更多指南。 赛义德罗斯塔米。 I.R.I的IT工程师 +98 935 516 90 58