【问题标题】:How can I read a ViewBag value?如何读取 ViewBag 值?
【发布时间】:2017-02-03 11:37:06
【问题描述】:

我需要用控制器读取 viewbag 的值,我该怎么做?

控制器

app.controller('ConseilManagOrga', function ($scope, $http) {
$http.get("../api/Form/GetForm?id=" + @ViewBag.id).success(function (response) {
    $scope.FormFund = response;
});

});

查看包

  if (Name == "ConseilManagOrga")
        {
            ViewBag.Form = "FormChildren";
            ViewBag.Controller = "ConseilManagOrga";
            ViewBag.Image = "stone.jpg";
            ViewBag.id = 3;
        }

【问题讨论】:

  • viewBag 到底是什么?这与 Angular 有什么关系吗?如果没有,我建议添加一个解释它的标签
  • Asp.Net MVC Viewbags 在提供视图之前在您的视图上解析服务器端。 Afaik 这是不可能的/无论如何都没有意义。您可以在视图中将 globala 变量设置为 Viewbag,但似乎是一个糟糕的设计选择
  • @PWKad,我同意分配给全局变量是一个糟糕的设计选择,但您可以很容易地分配给 AngularJS 范围变量。您的意思是认为使用全局变量是一个糟糕的设计选择,还是整个实践?
  • 几乎没有理由去做提问者试图做的事情,因为 ASP.NET MVC 中的 Angular 应用程序只会在加载时从 viewbag 评估该属性

标签: angularjs asp.net-mvc razor viewbag


【解决方案1】:

我认为最好的方法是编写一个脚本标签并使用 Razor 将 JavaScript 变量的值设置为 ViewBag 值:

<script type="text/javascript">
    var MyVariableFromViewBag = '@ViewBag.id';
</script>

这将创建一个名为 MyVariableFromViewBag 的全局变量。当然,您应该避免在生产代码中使用全局 javascript 变量。修改示例以分配给更安全的变量。

【讨论】:

  • 这个答案不正确 - 使用 var (variableName) 不会在全局范围内创建变量,您应该删除 var 或更好地使用 window.MyVariableFromViewbag
  • @PWKad 我敢打赌,他的示例中的 MyVariableFromViewBag 将自动存储在 window 对象中,因为它是一个全局对象。
【解决方案2】:

另一种解决方法是使用隐藏的输入字段来获取您的 Viewbag 值:

<input type="hidden" id="myId" value="@ViewBag.id" />

然后在您的 javascript 文件中,您可以通过 id 访问此值:

var myId = $("#myId").val();

【讨论】:

    【解决方案3】:

    使用 ng-init 也是另一种方法。

    ng-init="vm.environment = '@ViewBag.Environment'"
    

    【讨论】:

      猜你喜欢
      • 2016-11-03
      • 1970-01-01
      • 2015-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多