我正在开发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"]);
此会话。
谢谢你提前
答案 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)
在您的控制器中创建一个clear
和abandon
会话的操作。您可以使用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