如何将服务器会话从 Razor MVC C# 传递到 Angularjs?
How to pass a server session from Razor MVC C# to Angularjs?
我正在尝试找出将服务器会话数据从 MVC Razor 应用程序传递到 Angularjs 的最佳方法。
在 ASP.net 中,我们能够使用 System.Web.UI.Page 创建字符串字典项并 json 序列化该数据,然后将该项传递给 [=24] 来扩展 class =],但我无法遵循相同的路径,因为我正在使用 Razor。
我目前只是传递 ViewBag.variableName 并在 ng-init 中设置值,但这并不理想。所以我想到了几个想法。
设置一个 angular 服务来获取一个 ashx 处理程序页面,使用 angular 控制器将会话放入 $scope.variable 会更好吗?或者将会话传递给视图,然后以某种方式将其放入 $scope?
从 MVC Razor 获取服务器会话变量到 angular 的最佳方法是什么?
Ok, I posted my below answer, but I'm still having trouble getting the session into scope of my multiple controllers. Because http.get is asynchronous and I can't get the results set to be dynamic.
所以这是我最终采用的方法。我只是不知道这是否是最佳实践。根据评论,我指定要发送到 angular.
的会话项目
1) 我创建了一个独特的字典,它将把数据传递给我的会话变量
private Dictionary<string, List<string>> _sessionDict
= new Dictionary<string, List<string>>();
2) 我创建了一个 fn() 来帮助加快插入过程
public static void addDictionarySession(
Dictionary<string, List<string>> sessionDict, string key, string value)
{
List<string> stringValue = new List<string>() { value };
sessionDict.Add(key, stringValue);
}
3) 我将数据插入到我的字典中
utility.addDictionarySession(_sessionDict, "test", "This is a test");
4) 我将词典添加到会话中
Session.Add("jsPass", _sessionDict);
5) 我创建了一个 ashx 处理程序页面来获取会话变量,这里是我的函数
private void getSessionVariables()
{
Dictionary<string, string> sessionData = new Dictionary<string, string>();
// Retrieve Session that is stored in dictionary
Dictionary<string, List<string>> sessionDict =
_context.Session["jsPass"] as Dictionary<string, List<string>>;
if (sessionDict != null)
{
foreach (KeyValuePair<string, List<string>> entry in sessionDict)
{
// Set the Value of the item
foreach (string value in entry.Value)
{
sessionData.Add(entry.Key, value.ToString());
}
}
}
// _context is just my private HttpContext variable I set at the beginning of the class
utility.httpContentWrite(_context, sessionData);
}
5) 我创建了一个 angular 服务来获取 ashx 处理程序页面
// Load Session
getSession: function () {
return $http.get('../../handlers/getSessionData.ashx');
}
6) 我创建了一个 angular 控制器函数来调用服务并将项目拉入 $scope 变量,我将函数设置为一个变量然后执行函数调用
var setSession = function () {
UtilityService.getSession().success(
function (results) {
$scope.session = results;
});
};
setSession();
7) 我现在可以访问我的变量
{{session.test}}
8) 您可以使用此查看您设置的所有项目
<div ng-repeat="(key, value) in session">
<span>{{key}} : {{value}}</span>
</div>
9) 我能够将会话纳入范围
只需在您的页面控制器中创建一个专用操作,以从服务器会话获取值到您的 AngularJs 代码中的 JavaScript Ajax 请求。
// Action to return the session value. This method should be inside a controller class.
public object GetSession(string sessionName)
{
return Session[sessionName];
}
// JavaScript code to retrieve session "TEST":
$http.get('action/url/' + "TEST").
success(function (sessionValue) {
alert('Session "TEST" has the following value: ' + sessionValue);
}
);
我正在尝试找出将服务器会话数据从 MVC Razor 应用程序传递到 Angularjs 的最佳方法。
在 ASP.net 中,我们能够使用 System.Web.UI.Page 创建字符串字典项并 json 序列化该数据,然后将该项传递给 [=24] 来扩展 class =],但我无法遵循相同的路径,因为我正在使用 Razor。
我目前只是传递 ViewBag.variableName 并在 ng-init 中设置值,但这并不理想。所以我想到了几个想法。
设置一个 angular 服务来获取一个 ashx 处理程序页面,使用 angular 控制器将会话放入 $scope.variable 会更好吗?或者将会话传递给视图,然后以某种方式将其放入 $scope?
从 MVC Razor 获取服务器会话变量到 angular 的最佳方法是什么?
Ok, I posted my below answer, but I'm still having trouble getting the session into scope of my multiple controllers. Because http.get is asynchronous and I can't get the results set to be dynamic.
所以这是我最终采用的方法。我只是不知道这是否是最佳实践。根据评论,我指定要发送到 angular.
的会话项目1) 我创建了一个独特的字典,它将把数据传递给我的会话变量
private Dictionary<string, List<string>> _sessionDict
= new Dictionary<string, List<string>>();
2) 我创建了一个 fn() 来帮助加快插入过程
public static void addDictionarySession(
Dictionary<string, List<string>> sessionDict, string key, string value)
{
List<string> stringValue = new List<string>() { value };
sessionDict.Add(key, stringValue);
}
3) 我将数据插入到我的字典中
utility.addDictionarySession(_sessionDict, "test", "This is a test");
4) 我将词典添加到会话中
Session.Add("jsPass", _sessionDict);
5) 我创建了一个 ashx 处理程序页面来获取会话变量,这里是我的函数
private void getSessionVariables()
{
Dictionary<string, string> sessionData = new Dictionary<string, string>();
// Retrieve Session that is stored in dictionary
Dictionary<string, List<string>> sessionDict =
_context.Session["jsPass"] as Dictionary<string, List<string>>;
if (sessionDict != null)
{
foreach (KeyValuePair<string, List<string>> entry in sessionDict)
{
// Set the Value of the item
foreach (string value in entry.Value)
{
sessionData.Add(entry.Key, value.ToString());
}
}
}
// _context is just my private HttpContext variable I set at the beginning of the class
utility.httpContentWrite(_context, sessionData);
}
5) 我创建了一个 angular 服务来获取 ashx 处理程序页面
// Load Session
getSession: function () {
return $http.get('../../handlers/getSessionData.ashx');
}
6) 我创建了一个 angular 控制器函数来调用服务并将项目拉入 $scope 变量,我将函数设置为一个变量然后执行函数调用
var setSession = function () {
UtilityService.getSession().success(
function (results) {
$scope.session = results;
});
};
setSession();
7) 我现在可以访问我的变量
{{session.test}}
8) 您可以使用此查看您设置的所有项目
<div ng-repeat="(key, value) in session"> <span>{{key}} : {{value}}</span> </div>
9) 我能够将会话纳入范围
只需在您的页面控制器中创建一个专用操作,以从服务器会话获取值到您的 AngularJs 代码中的 JavaScript Ajax 请求。
// Action to return the session value. This method should be inside a controller class.
public object GetSession(string sessionName)
{
return Session[sessionName];
}
// JavaScript code to retrieve session "TEST":
$http.get('action/url/' + "TEST").
success(function (sessionValue) {
alert('Session "TEST" has the following value: ' + sessionValue);
}
);