簡體   English   中英

將數據從MVC控制器傳遞到Angular視圖,而不在最終的html中顯示數據值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM