【问题标题】:Unable to retrieve the model property value in Java script in asp.net mvc?无法在 asp.net mvc 中检索 Javascript 中的模型属性值?
【发布时间】:2020-07-20 15:10:56
【问题描述】:

我正在尝试访问视图端的模型属性,但它没有按预期工作。 这是我的代码

@{
    ViewBag.Title = "Manage";
    var message = Model.errorMessage;

}

在我看来,在上面的代码中,从控制器端传递的值是在 var 消息中接收的。 问题出在这里:

if ('@message' == "AlreadyTaken") {
                    $("#alertSection").show();
                }

它被执行为

 if ('' == "AlreadyTaken") {
                $("#alertSection").show();
            }

我尝试了很多解决方案,但都是徒劳的

【问题讨论】:

  • 只是一个问题,您是将 Javascript 内联在同一个 cshtml 文件中还是在单独的 JS 文件中?
  • 相同的cshtml文件@Markuzy
  • 可以在这里发布模型类吗?当您在返回视图之前在控制器操作中设置断点时,当您将鼠标悬停在模型上时会看到什么? errorMessage 是否存在?

标签: c# asp.net asp.net-mvc asp.net-mvc-5


【解决方案1】:

您需要将值放入 JS 可以访问的东西中,例如

@{
    ViewBag.Title = "Manage";
    var message = Model.errorMessage;

}

<input id="myMessage" type="text" value="@message" hidden />

然后在 JS 中

if($('#myMessage').val() == 'AlreadyTaken'){
    $("#alertSection").show();
}

假设您在文档就绪时触发 JS。

【讨论】:

  • 输入标签在 value 属性中没有得到任何东西
  • 我认为值在中间某处发生了变化..努力但失败了
【解决方案2】:

如果您的完整 cshtml 代码如下所示

@{
    ViewBag.Title = "Home Page";
    var message = Model.errorMessage;
}

<script type="text/javascript">
    if ('@message' == "AlreadyTaken") {
        $("#alertSection").show();
    }
</script>

javascript 部分呈现为的唯一原因

 if ('' == "AlreadyTaken") {
            $("#alertSection").show();
        }

是:

  • Model.errorMessage 为空
  • Model.errorMessage 是一个空字符串
  • Model.errorMessage 是一个对象的实例,其 ToString() 方法调用导致 null 或空字符串

如果不是这种情况,可能有一些代码会改变message的值

【讨论】:

    【解决方案3】:

    您的以下代码在服务器端执行。

    @{
        ViewBag.Title = "Manage";
        var message = Model.errorMessage;
    
    }
    

    但是,下面的代码是在客户端执行的 javascript 代码。

    if ('@message' == "AlreadyTaken") {
                        $("#alertSection").show();
                    }
    

    客户端不知道@message 是什么。为了完成这项工作,您需要将消息变量公开为 javascript 字符串。

    <script>
     let javascriptMessage = '@Html.Raw(message)'
     if(javascriptMessage == 'AlreadyTaken') {
         $("#alertSection").show();
     }
    </script>
    

    【讨论】:

    • 我理解您想要表达的意思,但带有“@”的 razor 语法将始终在服务器端执行,即使放在同一页面上的内联 JavaScript 中也是如此。但是,这引出了线程启动器的问题:javascript 是在剃刀视图中还是在另一个文件中? (顺便说一句,我不是反对你的人)
    • javascript 在 razor 文件中。是的,带有“@”的语法将在服务器端执行。这就是我们在构建剃须刀页面时创建变量 javascriptMessage 的原因。这将在加载页面时使用从“@message”复制的值加载到客户端。
    • 我已经尝试过了,但同样的故事@Kshitiz Shakya
    • @Ummar,您是否已将 javascriptMessage 声明为全局变量?如果是这样,它的价值是什么?您可以使用调试器查看 javascriptMessage 的值。
    猜你喜欢
    • 2016-04-11
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    相关资源
    最近更新 更多