Javascript 读取本地存储,通过JSON将其传递给服务器,并在MVC3中从中创建会话
大致上,我试图实现的是一个网站的登录系统,允许使用来宾帐户,将他们的数据存储在localStorage中。如果他们单击按钮以来宾身份登录,则在将数据传递给服务器之前,它将尝试通过localStorage读取可能存在的任何以前的数据,以便它可以创建会话并依赖该会话返回基于该数据的视图。这可能不是最有效的处理方式,但如果用户使用帐户登录,而不是使用gust登录,那么它将从数据库中检索信息,因此它必须与数据库一起工作 为了确定服务器端正在发生的事情,它类似于iGoogle,用户提供URL列表,并返回一个包含这些URL的iFrame的可滚动墙的网页。如果他们使用实际帐户登录,他们的数据将存储在数据库和会话中,如果他们作为来宾登录,他们的数据将存储在本地和会话中。这可能会再次进行优化,以减少对会话变量服务器端的依赖,但我的重点是先让它工作,然后再对它进行优化 视图:(仍然包含一些调试代码) 现在,它似乎很好地创建和传递了JSON对象,尽管尽管设置了会话ID,它还是返回了一个失败,但我不想从这里继续,直到我知道JSON对象是按照我希望的方式构建的。我是如何实现它的?在这个过程中我有没有犯过任何严重的编码错误Javascript 读取本地存储,通过JSON将其传递给服务器,并在MVC3中从中创建会话,javascript,jquery,json,asp.net-mvc-3,modernizr,Javascript,Jquery,Json,Asp.net Mvc 3,Modernizr,大致上,我试图实现的是一个网站的登录系统,允许使用来宾帐户,将他们的数据存储在localStorage中。如果他们单击按钮以来宾身份登录,则在将数据传递给服务器之前,它将尝试通过localStorage读取可能存在的任何以前的数据,以便它可以创建会话并依赖该会话返回基于该数据的视图。这可能不是最有效的处理方式,但如果用户使用帐户登录,而不是使用gust登录,那么它将从数据库中检索信息,因此它必须与数据库一起工作 为了确定服务器端正在发生的事情,它类似于iGoogle,用户提供URL列表,并返回一
作为替代方案,我希望使用一个类对象来存储ID、URL的arraylist和整数,但我不确定这可能会因为处理对象而不是容易定义的变量而增加复杂性。使用JSON.stringify和JSON.parse确实可以做到这一点,您不应该有任何问题。因为我(和一些回答者)不熟悉jquery或其他库,所以您可能希望将jquery或Modernizer作为标记,以便了解这些框架的人可以更好地为您服务。谢谢你的提醒。
<div id="LocalStorageStatus"></div>
<script type="text/javascript">
var isGuest = false;
if (Modernizr.localstorage) {
$('#LocalStorageStatus').html('<button type="input" onclick="guest()" id="guest">Log in as guest</button>');
function guest() {
localStorage["Guest"] = true;
var URLarray = new Array();
if(localStorage["URL"] != "0")
{
for(var i = 0; i < localStorage["URL"]; i++)
URLarray[i] = localStorage["URL" + i];
}
var data = {
ID : 'local',
URL: localStorage["URL"],
URLList : URLarray,
Template: localStorage["Template"]};
$.ajax({
url: '@Url.Action("Guest","Login")',
data: JSON.stringify(data),
success: function () { alert("YOU ARE A GUEST!") },
error: function () { alert("YOU ARE NOT A GUEST!") },
type: 'POST',
contentType: 'application/json, charset=utf-8',
dataType: 'json'
});
}
}
else {
$('#LocalStorageStatus').html('Guest log-in requires an HTML5-compatible browser.');
}
</script>
public class GuestUser
{
public string ID { get; set; }
public int URL { get; set; }
public List<string> URLList { get; set; }
public int Template { get; set; }
}
[HttpPost]
public ActionResult Guest(GuestUser guest)
{
Session.SetDataInSession("ID", guest.ID);
return RedirectToAction("../Frames");
}