无法在asp.net mvc中的Java脚本中检索模型属性值



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

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

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

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

作为执行

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

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

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

@{
ViewBag.Title = "Manage";
var message = Model.errorMessage;
}
<input id="myMessage" type="text" value="@message" hidden />

然后在JS 中

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

假设您正在对文档启动JS。

如果您的完整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为null
  • Model.errorMessage是空字符串
  • Model.errorMessage是对象的实例,其ToString((方法调用导致null或空字符串

如果不是这样的话,可能中间有一些代码会更改message的值

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

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

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

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

客户端不知道@message是什么。为了实现这一点,您需要将message变量公开为javascript字符串。

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

最新更新