• 主页
  • ASP
  • .NET Framework
  • Web Services
  • VB
  • VC
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • LINQ

如何使用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类型,也是同样这个问题,怎么方便的传非字符串值到网页代码上?
...全文
613 点赞 收藏 15
写回复
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源代码放上来吧。
回复 点赞
非专业开发Five 2018年03月21日
引用 6 楼 daixf_csdn 的回复:
[quote=引用 2 楼 xomix 的回复:]

@Html.Raw(ViewBag.IsRegistered)
这个行不?
图贴错了,是这个 [/quote] 这种语法错误无所谓啊,你这又不是实际页面,编译可以过去的。
回复 点赞
非专业开发Five 2018年03月21日
引用 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() 就行。
回复 点赞
非专业开发Five 2018年03月21日

@Html.Raw(ViewBag.IsRegistered)
这个行不?
回复 点赞
Veary 2018年03月21日
好像不能在JS中直接使用@ViewBag 建议如下: 1.在界面上创建一个隐藏控件 并设置一个Id 2.隐藏控件的Value=@ViewBag.XXX 3.JS中要使用@ViewBag的位置 使用 $("#Id").val() 可获取到
回复 点赞
发动态
发帖子
.NET技术社区
创建于2007-09-28

4.9w+

社区成员

66.8w+

社区内容

.NET技术交流专区
社区公告
暂无公告