从localStorage读取,通过JSON将其传递给服务器,并在MVC3中创建一个会话

时间:2011-12-09 03:20:04

标签: javascript jquery json asp.net-mvc-3 modernizr

我想要实现的大致是网站的登录系统,允许使用来宾帐户,将他们的数据存储在localStorage中。如果他们单击按钮以访客身份登录,它将尝试通过localStorage读取在将其传递给服务器之前可能存在的任何先前数据,以便它可以创建会话并依赖该会话返回基于视图的关于那些数据。这可能不是处理它的最有效方式,但如果用户使用帐户而不是阵风登录,它将从数据库中检索信息,因此它必须与之一起工作。

只是为了确定服务器端正在发生的事情,它类似于iGoogle,用户提供了一个URL列表,它将返回一个包含这些URL的iFrames可滚动墙的网页。如果他们使用实际ccount登录,他们的数据将存储在数据库和会话中,如果他们以访客身份登录,他们的数据将存储在本地以及会话中。这可能再次优化,以减少对会话变量服务器端的依赖,但我专注于让它先工作,然后我可以优化它。

查看:(仍然包含一些调试代码)

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

现在,它似乎正在创建并传递JSON对象,尽管它确实在设置会话ID时返回失败,但我不想从此处继续,直到我知道JSON对象正在建造我想要的。这会影响我如何实现它并且我在这个过程中犯了任何主要的编码暴行吗?

作为替代方案,我想使用一个存储ID的类对象,一个URL的arraylist和一个整数,但我不确定由于处理对象而不是容易定义的变量而可能增加的复杂性

0 个答案:

没有答案