我正在尝试访问视图端的模型属性,但它没有按预期工作。这是我的代码
@{
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>