【100分】神奇的MVC里Razor语法问题,大侠们都来看看吧!!!!!!

丰云 2018-02-01 09:38:25

@{
var action = (Model.Personal ?? 0) == 0 ? "SysPartial" : "OwnPartial";
@Html.Action(action);
}


@{
var action = (Model.Personal ?? 0) == 0 ? "SysPartial" : "OwnPartial";
Html.Action(action);
}

两段代码,唯一区别就是里面的Html.Action()前面,有没有@符号。

按照常规的理解,这里面没有html标签,里面的@符号是可以去掉的。
但实际的效果却相反,没去掉,页面内容能正常包进来,
去掉了,内容没有包进来!

各位大侠大神大仙们,谁能解释一下啊???
...全文
676 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
hudtiger 2018-02-03
  • 打赏
  • 举报
回复
666,为了分回复哈。
lovebaby 2018-02-02
  • 打赏
  • 举报
回复
从razor语法设计角度出发,代码最外层是属于代码块,所以代码块里的除非再次指定@输出内容,否则razor都认为是代码块。
  • 打赏
  • 举报
回复
@Html.Action(action); 这里的Html是Helper方法,不加@不能识别出
yzf86211861 2018-02-02
  • 打赏
  • 举报
回复
C# 就是就是 语法糖 搞的 太多,不能理解 就硬记吧,用多了 就习惯了。
丰云 2018-02-02
  • 打赏
  • 举报
回复
这得分怎么回事,我明明都给分了,怎么有没得分的,还有得分比我给的多的
  • 打赏
  • 举报
回复
必须带吧,谁告诉你不需要带的?没@符号的话,Razor怎么知道你是要输出html,而不是运行一段C#代码呢?
全栈极简 2018-02-01
  • 打赏
  • 举报
回复
简单的理解,@Html.Action(action); 这里的Html是Helper方法,不加@不能识别出。@{}这是代码段,里面可以存放C#变量。
笑容融化坚冰 2018-02-01
  • 打赏
  • 举报
回复
对你两个图的详细解释就是,图1你告诉Razor,我要把方法返回值渲染进HTML里,而图2你仅仅是执行了一个方法,也没有保存或使用该返回值
exception92 2018-02-01
  • 打赏
  • 举报
回复
带@符号,Razor就认为它是个正确的Html帮助器,能正确渲染出对应的标签。
江湖评谈 2018-02-01
  • 打赏
  • 举报
回复
谁告诉你没有html 标签就可以去掉 @ ?好好看看razor 标记
笑容融化坚冰 2018-02-01
  • 打赏
  • 举报
回复
上面很多人都提到了,Razor视图里,C#表达式前面加@,Razor会把结果渲染进HTML里,而@{}仅仅是个C#语句块。 有代码洁癖的人估计会写成 @Html.Action((Model.Personal ?? 0) == 0 ? "SysPartial" : "OwnPartial")
圣殿骑士18 2018-02-01
  • 打赏
  • 举报
回复
razor在使用@上真的是非常灵活,有时候带不带都行,有时候带不带则有差别。
闭包客 2018-02-01
  • 打赏
  • 举报
回复
如果 Razor 的 @ 只有一种意义的话,return Html.Action(action); 就可以输出。
正怒月神 版主 2018-02-01
  • 打赏
  • 举报
回复
我刚才测试了5#的说法,是正确的。 带不带@都会执行 Html.Action(action)。 带了会显示,不带不回显示。
引用 5 楼 From_TaiWan 的回复:
带上@,执行并输出内容,在视图上能看见 不带,只是执行,不显示
闭包客 2018-02-01
  • 打赏
  • 举报
回复
引用 7 楼 closurer 的回复:
[quote=引用 5 楼 From_TaiWan 的回复:] 带上@,执行并输出内容,在视图上能看见 不带,只是执行,不显示
我比较认可这个说法,就是这个 @,实际上是 Response.Write [/quote] 但是在提问者的代码中,第一个 @ 的意义显然不是 Response.Write,所以 Razor 语法对 @ 的作用都设计了多重含义,也就容易造成提问者这种理解上的问题。
闭包客 2018-02-01
  • 打赏
  • 举报
回复
引用 5 楼 From_TaiWan 的回复:
带上@,执行并输出内容,在视图上能看见 不带,只是执行,不显示
我比较认可这个说法,就是这个 @,实际上是 Response.Write
闭包客 2018-02-01
  • 打赏
  • 举报
回复
一种编程语言,或领域语言的行为是怎么样的,都要以实际执行的结果为准。 你的测试结果已经说明了不加 @ 是不行的,Razor 语法的标准如何,文档怎么写已经没有意义了。 从语法分析的角度来说,不加 @ 是可以知道你的代码要做什么的,Razor 的语法不这样做,可能有设计者自己的考虑,也能是一个设计缺陷。 我认为 Razor 引擎虽然比以前的 aspx 要有进步,但是问题仍然很多。我用一次之后,凡是自己能够选择技术框架的项目,就再也不用了。
秋的红果实 2018-02-01
  • 打赏
  • 举报
回复
带上@,执行并输出内容,在视图上能看见 不带,只是执行,不显示

62,073

社区成员

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

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

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

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