如何设置使用MVC4用razorJavaScript变量

 我来答
就烦条0o
2016-05-29 · 知道合伙人软件行家
就烦条0o
知道合伙人软件行家
采纳数:33315 获赞数:46492
从事多年系统运维,喜欢编写各种小程序和脚本。

向TA提问 私信TA
展开全部
1.你应该看看你的剃须刀页面的输出结果。试试这个:
@{
int proID = 123;
int nonProID = 456;
}
<script>
var nonID = @nonProID;
var proID = @proID;
window.nonID = @nonProID;
window.proID = @proID;
</script>

输出应该是这样的:
2.
这是我解决了这个问题:
@{int proID = 123; int nonProID = 456;}
<script type="text/javascript">
var nonID = Number(@nonProID);
var proID = Number(@proID);
</script>

它是自我和它不涉及转换到和从文本。
必须注意,虽然,因为数字是现在的对象不是原语和恰好等于运算符可能会出现非方式:
var y = Number(123)
alert(y === 123); // displays false

3.
由于razor语法错误可能你工作的看法,而有问题的,我完全明白你为什么会想避开他们。这里有几个其他的选择。
<script type="text/javascript">
// @Model.Count is an int
var count = '@Model.Count';
var countInt = parseInt('@Model.ActiveLocsCount');
</script>

引号作为分隔符,所以razor解析器是幸福的。不过,当然你的C#诠释一个JS字符串中优先个为纯粹主义者 CodeGo.net,第二个选项可能会更好。
如果有这样做没有razor语法错误,尤其是维护VAR的类型更好的办法,我很想看看吧!
4.
它的工作原理,如果你这样做:
var proID = @proID + 0;

它产生的代码是这样的:
var proID = 4 + 0;

有点奇怪肯定的,但至少没有更多的假语法错误。
可悲的错误仍报在VS2013,所以这并没有得到妥善解决(还)。
5.
没有那么多的答案作为警示:这是还有-我以为我已经被预先等候为零的解决方案@(...)语法。即你的代码将是:
var nonID = 0@(nonProID);
var proID = 0@(proID);

获得输出,如:
var nonId = 0123;

我没有意识到的是,这是JavaScript的(第3版)如何表示八进制/基8号和实际改变值。此外,如果您的"use strict";命令,那么它会破坏你的代码完全是为八进制数字已被删除。
我还在寻找一个合适的解决方案了。
6.
我一直在找这个方法:
function getServerObject(serverObject) {
if (typeof serverObject === "undefined") {
return null;
}
return serverObject;
}
var itCameFromDotNet = getServerObject(@dotNetObject);

这似乎令人对JS的侧安全......最糟糕的情况下,你最终会得到一个空变量。
7.
我见过几个方法来解决这个Bug的工作,和我跑计时测试,看看有什么工作速度(
方法:



在这种方法中,razor语法被直接分配给变量。这是引发错误。作为基线,JavaScript的速度测试只是做了一些给变量的直线。

通过`Number`构造

在这种方法中,我们结束了通话razor语法到`Number`构造,如'号(@ViewBag.Value)`。

parseInt函数

在这种方法中,razor语法放在引号内,并传递给`parseInt`函数。

返回值的函数

在这种方法中,一个函数被创建简单的把razor语法作为一个并返回它。

类型检查函数

在这种方法中,该函数执行基本的类型检查(寻找空,基本)和返回值,如果它不为null。

使用上述每一个for-loop重复每个函数调用10M的总整个循环得到。然后,该for循环重复30至每10M行动得到平均。这些是彼此以确定哪些行动比其他更快。
需要注意的是,因为它是JavaScript的运行状态,其他人收到的实际数目将有所不同,但重要的是不实际的数目,但如何到其它号码。
结果:
用直接的方法,来处理10M平均为98.033ms。使用Number构造函数产生每10M 1554.93ms.class似地,parseInt方法把1404.27ms。这两个函数调用了97.5ms的简单函数和101.4ms的函数。

了解最干净的代码是直接然而,在Visual Studio中的bug,这个报告错误,并能与智能感知问题,并给出一个blur的感觉是错的。
最快的代码是简单的函数调用,而只能通过微弱优势。因为我没有做进一步的分析,我不知道,如果这种差异具有统计学意义.class型检查的函数也非常快,比直接只稍慢,包括可能的变量可以为空。这不是真的实用,不过,如果是不确定的(空的razor语法)连基本的函数将返回不确定的。
解析剃须刀价值为int,并通过构造函数运行它很慢,15倍速度慢的顺序不是直接最有可能的Number构造函数实际上是在内部调用parseInt,这可以解释为什么它需要比简单的长parseInt。然而,它们具有作为不要求一个外部定义的(即其他的文件或应用程序)的函数来执行的优点,同Number构造器实际上是一个整数的可见casting最小化到一个字符串。
底线是,这些数字是通过10M迭代生成运行。在一个项目中,速度是不可估量小。对于大多数,只需通过运行它Number构造方法可能是最可读的代码,尽管是最慢的。
8.
@{
int proID = 123;
int nonProID = 456;
}
<script>
var nonID = '@nonProID';
var proID = '@proID';
window.nonID = '@nonProID';
window.proID = '@proID';
</script>
丁季是睿博
2020-05-28 · TA获得超过3827个赞
知道小有建树答主
回答量:3189
采纳率:28%
帮助的人:187万
展开全部
这是你的项目采用代码语法设置问题,vs初始设置为c#是编程语言不是开发模式,你设置之后也可以使用vb.net,你添加文件的时候没有cshtml是因为你选择的代码模式不是razor语法,当然不能建立这个文件了,你要么使用razor语言,要么采用aspx模式
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式