[英]Passing data from MVC controller to Angular view without showing the data value in the final html
我正在從事MVC + Angular前端項目。 在一種情況下,將使用HTTPS GET請求啟動角度頁面,因此,它將顯示一個登錄頁面。 在另一種情況下,我們將在發布數據中獲取HTTPS POST請求以及用戶名和密碼。 在這種情況下,我們需要讓MVC控制器將這些信息傳遞給角度控制器,然后以不同的方式啟動角度頁面視圖。 我讀了幾篇有關如何將數據從MVC控制器傳遞到角度控制器(角度視圖)的文章。 這是我所擁有的
MVC控制器:
public class HomeController : Controller
{
[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
public ActionResult Index(string name, string password)
{
if (name == null)
{
name = "test";
password = "pass";
}
UserInfoModel infoModel = new UserInfoModel(name, password);
var model = SerializeObject(infoModel);
return View(model);
}
public static IHtmlString SerializeObject(object value)
{
using (var stringWriter = new StringWriter())
using (var jsonWriter = new JsonTextWriter(stringWriter))
{
var serializer = new JsonSerializer
{
// Let's use camelCasing as is common practice in JavaScript
ContractResolver = new CamelCasePropertyNamesContractResolver()
};
// We don't want quotes around object names
jsonWriter.QuoteName = false;
serializer.Serialize(jsonWriter, value);
return new HtmlString(stringWriter.ToString());
}
}
Index.cshtml
<!DOCTYPE html>
<html ng-app="MVCApp" ng-controller="LandingPageController">
<body>
<h1>{{models.username}}</h1>
<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.20/angular.min.js"></script>
@Scripts.Render("~/bundles/MVCApp")
@model IHtmlString
<script>
angular.module("MVCApp", []).value("data", @Html.Raw(Model));
</script>
</body>
</html>
Angular應用程序MVCApp.js類似於:
var MVCApp = angular.module('MVCApp', []);
MVCApp.controller('LandingPageController', LandingPageController);
角度控制器就像:
var LandingPageController = function ($scope, data) {
console.log(data);
$scope.models = {
username: data.userName
};
}
LandingPageController.$inject = ['$scope', 'data'];
當我運行它時,我可以看到數據確實傳遞到了LandingPageController。 但是,如果我查看頁面的html,則會在html中看到以下內容。
angular.module("MVCApp", []).value("data", {userName:"test",password:"pass"});
我不會在html中看到/讀取數據(至少一部分,例如密碼)。
我可以在html中不顯示數據的情況下傳遞數據嗎?
@ Html.Raw(Model)在呈現頁面時輸出模型的內容。 如果在頁面加載后通過單獨的ajax調用加載數據(而不是@ Html.Raw(Model)),則通過查看頁面源將看不到數據。
使用javascript調試器仍然可以很容易地找到它,因此就安全性而言,這絕對沒有任何作用。 但是,如果有人查看源,他們將看不到JSON數據頁面。
另一個缺點是,您要讓用戶等待更長的時間,而不是在首次提供頁面時提供初始數據。
另外,我不知道您最終要做什么,但是將明文密碼傳遞給瀏覽器幾乎是不正確的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.