Я пытаюсь найти лучший способ создания глобальных переменных для данного сеанса, которые доступны на стороне клиента jquery на стороне сценария и на сервере, а также на любой странице.
Лучший способ, которым я Придумали так далеко, чтобы передать мою модель вокруг. Когда я go из контроллера для просмотра, я передаю модель обычным способом:
return View(model);
Внутри моей страницы cs html я загружаю модель в локальный jquery объект:
var model = @Html.Raw(Json.Encode(Model));
Когда пользователи вносят изменения, я могу отразить эти изменения в моем jquery объекте:
model.Name=$("#name").val();
Затем, когда я go перехожу на новую страницу, я передаю объект jquery обратно на свой сервер. боковая модель с использованием json.
jquery
//convert model to json string
var strJson = JSON.stringify(model);
//call another page and pass json string
window.location.href = "/Home/Test/?strJson=" + strJson;
контроллер
public ActionResult Test(string strJson)
{
//convert json string back to model object
ProjectModel model = new ProjectModel();
model = new JavaScriptSerializer().Deserialize<ProjectModel>(strJson);
return View(model);
}
Этот метод работает довольно хорошо, но мне интересно, есть ли лучший способ , Я пытался использовать объект Session, но у меня возникли проблемы с доступом к данным объекта Session из jquery. Я написал 2 ajax вызовов SetSession и GetSession для чтения и записи переменных в объект Session сервера, но GetSession вызывает у меня головную боль из-за того, что он асинхронный. Так что, если я сделаю это, то выйдет из строя:
jquery
//calls a function that uses ajax to get the Session variable
var x = GetSession("Name");
alert(x); //undefined because this statement get executed before x is set
Так что я застрял на данный момент, используя эту идею (объект Session).
Кто-нибудь знает лучший способ создания глобалов, доступных из jquery и контроллера?