如何使用ViewBag向页面传递非字符串的值?

圣殿骑士18 2018-03-21 03:22:57
如何使用ViewBag向页面传递非字符串的值?

我现在网页端是这样写的:@ViewBag.IsRegistered加了双引号

<script>
var isRegistered = "@ViewBag.IsRegistered";
</script>


ViewBag.IsRegistered在后端生成的是bool值,我想在前端也用bool值,这样判断方便。但我把双引号去掉,页面提示编译错误,分号处有错误。我也试过把引号和分号都去掉,错误提示是没了,倒是能通过,但发现前端页面得到的
var isRegistered = true
这个true值,并没有在其他相关的地方起作用。即这里knockout属性未起作用,div未被隐藏。

<div class="bl-blank" data-bind="visible: isRegistered == false">请先到“我”页签进行登记</div>


同样的,还有比如int类型,也是同样这个问题,怎么方便的传非字符串值到网页代码上?
...全文
961 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovebaby 2018-03-26
  • 打赏
  • 举报
回复
实测
var s = @(Convert.ToString(ViewBag.Test).ToLower());
会提示语法错误,但可以正常输出。
 var s = true;
圣殿骑士18 2018-03-22
  • 打赏
  • 举报
回复
引用 11 楼 Runnerchin 的回复:
你的页面没有出现预期的效果,只有两个可能,1是执行顺序有问题,先判断然后才赋值。或者只给元素绑定了值,却没有根据绑定的值进一步去执行相应的动作(比如显式地在js里隐藏相应的元素)。 不行的话直接把你浏览器里测试页面的HTML源代码放上来吧。
你说对了,关键是还这句话: //ToString()得到 "True",要转成小写 因为C#输出的是 True,js只能识别 小写的 true。 所以我改成 var isRegistered = @ViewBag.IsRegistered.ToString().ToLower(); 就一切ok了。 @xomix
圣殿骑士18 2018-03-22
  • 打赏
  • 举报
回复
引用 1 楼 u011785544 的回复:
好像不能在JS中直接使用@ViewBag 建议如下: 1.在界面上创建一个隐藏控件 并设置一个Id 2.隐藏控件的Value=@ViewBag.XXX 3.JS中要使用@ViewBag的位置 使用 $("#Id").val() 可获取到
这个显然没有我用双引号方便。
引用 8 楼 xomix 的回复:
[quote=引用 6 楼 daixf_csdn 的回复:] [quote=引用 2 楼 xomix 的回复:]

@Html.Raw(ViewBag.IsRegistered)
这个行不?
图贴错了,是这个 [/quote] 这种语法错误无所谓啊,你这又不是实际页面,编译可以过去的。[/quote] 编译是可以过去,但运行没效果
X-i-n 2018-03-21
  • 打赏
  • 举报
回复
@ViewBag.Message=true; 我自己的代码里这句也犯了个大错。 应该扔到Controller里,或者改成用一个变量来测试,不过正好也能说明Html部分的问题。最后生成的html代码里,变成了True,隐式将ViewBag的值(布尔类型的true)用ToString输出了出来,最 终得到了 True = true;
X-i-n 2018-03-21
  • 打赏
  • 举报
回复
……还在纠结这个哪 你的View里有HTML标记,也有razor标记。html的部分直接原样输出,razor部分在服务端生成以后输出。 下面这一段作为HTML代码,是拼出来的:var isRegistered = true/false ; 红字部分,可以通过任何形式的表达式得到,只要最终输出 "true" 或者 "false" 字符串就可以,像下面这样,在View里写出来,最后的效果是一样的。写View的时候,最终渲染出来的,是Html源代码。而Html.Raw用在这,属于概念没搞清直接在那碰运气,和这个问题本身毫不相干。
<script>
    @ViewBag.Message=true;
    var flag =@ViewBag.Message.ToString().ToLower();
    console.log(flag);//ToString()得到 "True",要转成小写

    flag = @("t"+"ru"+"e");
    console.log(flag);

    flag =@(new string((new char[] { 't', 'r', 'u', 'e' })).ToString());
    console.log(flag);

    flag =@(System.Text.Encoding.UTF8.GetString(new byte[] {0x74,0x72,0x75,0x65 }));console.log(flag);
    console.log(flag);

    if (flag ==(1==1)) { alert("真"); } else { alert("假"); };
</script>
最终会得到,而且在浏览器的js控制台里会连着log下来5个true。
<script>
    True=true;
    var flag =true;
    console.log(flag);//ToString()得到 "True",要转成小写

    flag = true;
    console.log(flag);

    flag =true;
    console.log(flag);

    flag =true;console.log(flag);
    console.log(flag);

    if (flag == (1 == 1)) { alert("真"); } else { alert("假"); };
</script>
X-i-n 2018-03-21
  • 打赏
  • 举报
回复
你的页面没有出现预期的效果,只有两个可能,1是执行顺序有问题,先判断然后才赋值。或者只给元素绑定了值,却没有根据绑定的值进一步去执行相应的动作(比如显式地在js里隐藏相应的元素)。 不行的话直接把你浏览器里测试页面的HTML源代码放上来吧。
  • 打赏
  • 举报
回复
引用 6 楼 daixf_csdn 的回复:
[quote=引用 2 楼 xomix 的回复:]

@Html.Raw(ViewBag.IsRegistered)
这个行不?
图贴错了,是这个 [/quote] 这种语法错误无所谓啊,你这又不是实际页面,编译可以过去的。
  • 打赏
  • 举报
回复
引用 7 楼 daixf_csdn 的回复:
[quote=引用 4 楼 Runnerchin 的回复:] 没起作用怀疑是你的赋值代码后执行导致的。先执了判断代码,然后才执行赋值,看看代码执行顺序有问题吗
顺序没问题的,顺序不变,我只要加了引号,就能正确运行。[/quote]

<div class="bl-blank" data-bind="visible: @ViewBag.IsRegistered ">
试试看
圣殿骑士18 2018-03-21
  • 打赏
  • 举报
回复
引用 2 楼 xomix 的回复:

@Html.Raw(ViewBag.IsRegistered)


这个行不?

也不行的。这个错误也好理解,这样肯定语法错误,因为明显语法不通了,js识别不了@。。。这种代码。
圣殿骑士18 2018-03-21
  • 打赏
  • 举报
回复
引用 4 楼 Runnerchin 的回复:
没起作用怀疑是你的赋值代码后执行导致的。先执了判断代码,然后才执行赋值,看看代码执行顺序有问题吗
顺序没问题的,顺序不变,我只要加了引号,就能正确运行。
圣殿骑士18 2018-03-21
  • 打赏
  • 举报
回复
引用 2 楼 xomix 的回复:

@Html.Raw(ViewBag.IsRegistered)


这个行不?

图贴错了,是这个
X-i-n 2018-03-21
  • 打赏
  • 举报
回复
没起作用怀疑是你的赋值代码后执行导致的。先执了判断代码,然后才执行赋值,看看代码执行顺序有问题吗
X-i-n 2018-03-21
  • 打赏
  • 举报
回复
var isRegistered = true/false ;
你还在视图里拼js呢,这儿只是要一个"true" , "false" 而已。View的任务是把所有需要的东西都拼成html文本,是文本,文本,文本。 直接@ViewBag.IsRegistered.ToString().ToLower() 就行。
  • 打赏
  • 举报
回复

@Html.Raw(ViewBag.IsRegistered)
这个行不?
Veary 2018-03-21
  • 打赏
  • 举报
回复
好像不能在JS中直接使用@ViewBag 建议如下: 1.在界面上创建一个隐藏控件 并设置一个Id 2.隐藏控件的Value=@ViewBag.XXX 3.JS中要使用@ViewBag的位置 使用 $("#Id").val() 可获取到

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧