【问题标题】:How do I manipulate the DOM from the CSHTML.CS page?如何从 CSHTML.CS 页面操作 DOM?
【发布时间】:2019-07-17 18:25:13
【问题描述】:

我正在尝试根据用户权限从代码隐藏中删除某些 Web 应用程序按钮。

我尝试触发 javascript onload 以删除指定的 DOM 元素,但页面会先加载,然后再修改 DOM。我希望在页面加载之前先修改 DOM。

【问题讨论】:

  • 什么会阻止用户通过手动请求调用该操作?按钮消失了,并不意味着用户不能激活它的功能。
  • 如果您在视图模型中有这些权限数据,您可以将按钮包装在一个剃刀语法 if 语句中,该语句检查您的 cshtml 中该数据的值
  • 如果我理解正确,那么它就像@if (User.HasPermission) { //render }

标签: javascript c# asp.net-core


【解决方案1】:

您不想依赖 JavaScript 来确保安全性是对的,因为任何精通 JavaScript 的人都可以绕过它。

在你的 cshtml 页面中使用 Razor 语法,甚至一开始就不要把它放在那里。文档是here,但基本上你只需这样做:

@if ([check if user has permission]) {
    <button>Do Something</button>
}

该语句在您的服务器上进行评估。因此,如果用户没有权限,按钮将永远不会放在页面上。

如果你有按钮依赖的 JavaScript,你也可以通过做同样的事情来隐藏它:

@if ([check if user has permission]) {
    <script>
        function doSomething() {
            //do something
        }
    </script>
}

警告:如果您在已经存在的 &lt;script&gt; 标记内执行此操作,则需要将条件 JavaScript 放在 &lt;text&gt; 标记内,以便 Razor 引擎不会尝试解释 JavaScript:

<script>
    @if (true) {
        <text>
        function doSomething() {
            //do something
        }
        </text>
    }
</script>

【讨论】:

  • 不知道&lt;text&gt; 标签。我在这里做@Html.Raw("&lt;script&gt;...&lt;/script&gt;")。这是一个很好的提示。
  • @IskandarRezaRazali 他们称之为explicit delimited transition
  • 感谢您的帮助!这种方法完全符合我的要求。
猜你喜欢
  • 2019-10-10
  • 1970-01-01
  • 1970-01-01
  • 2015-12-28
  • 2019-02-03
  • 1970-01-01
  • 2016-11-01
  • 2010-12-14
  • 1970-01-01
相关资源
最近更新 更多