Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将字符串作为参数从视图传递到javascript函数中?_Javascript_Asp.net_Asp.net Mvc 4 - Fatal编程技术网

如何将字符串作为参数从视图传递到javascript函数中?

如何将字符串作为参数从视图传递到javascript函数中?,javascript,asp.net,asp.net-mvc-4,Javascript,Asp.net,Asp.net Mvc 4,我刚刚开始使用ASP.NET MVC项目,我已经过了基础阶段,但最近我遇到了一个问题,我无法将字符串作为id从视图中传递 到目前为止,我一直在向javascript函数传递id,如下所示: <script>app.init( <%: ViewContext.RouteData.Values["id"].ToString() %>)</script> <script>app.init(D2C02)</script> 我这样做是因为我需

我刚刚开始使用ASP.NET MVC项目,我已经过了基础阶段,但最近我遇到了一个问题,我无法将字符串作为id从视图中传递

到目前为止,我一直在向javascript函数传递id,如下所示:

<script>app.init( <%: ViewContext.RouteData.Values["id"].ToString() %>)</script>
<script>app.init(D2C02)</script>
我这样做是因为我需要使用id来执行javascript中的提交和ajax调用等操作(我更喜欢使用javascript)

到目前为止,这对int值有效,但当我尝试传递字符串时,它失败了。例如,如果我尝试访问此url localhost:65097/Device/Edit/D2C02,则会显示以下错误:

SCRIPT5009: 'D2C02' is undefined
当我检查生成的html代码时,对函数的调用如下所示:

<script>app.init( <%: ViewContext.RouteData.Values["id"].ToString() %>)</script>
<script>app.init(D2C02)</script>
app.init(D2C02)
id不应该像字符串一样作为“D2C02”传递,而不是像变量一样作为D2C02传递吗?因为这就是我所理解的,浏览器认为id D2C02代表的。如何确保id值作为字符串传递给javascript函数?

ToString()
只是将某些内容转换为字符串,但这是一个C字符串,而不是JS字符串。因此,最简单的解决方案是添加引号,假设值也不能包含引号:

<script>app.init("<%: ViewContext.RouteData.Values["id"].ToString() %>")</script>
app.init(“”)
如果它可能包含引号,您可以执行简单的替换以反斜杠转义它们,或者通过JSON序列化程序运行字符串,该序列化程序负责将其转换为有效的JavaScript字符串。

ToString()
只是将某些内容转换为字符串-但这是C字符串,而不是JS字符串。因此,最简单的解决方案是添加引号,假设值也不能包含引号:

<script>app.init("<%: ViewContext.RouteData.Values["id"].ToString() %>")</script>
app.init(“”)
如果它可能包含引号,您可以执行简单的替换以反斜杠转义它们,或者通过JSON序列化程序运行字符串,该序列化程序负责将其转换为有效的JavaScript字符串。

试试看

app.init(“”)

否则,您只需输入变量名,而不是字符串。c#中的ToString()方法不会将值括在引号中

app.init(“”)


否则,您只需输入变量名,而不是字符串。c#中的ToString()方法没有将vale括在引号中

我将使用的方法是这样做,使事情更加语义化——这过于简化,无法演示:

<body>
    <input id="myId" type="hidden" value="<%: ViewContext.RouteData.Values["id"].ToString() %>" />

...
<script language="text/javascript">
    function getId() {
        return document.getElementById("myId").value;
    }
</script>
</body>

...
函数getId(){
返回document.getElementById(“myId”).value;
}

我将使用的方法是这样做,使事情更加语义化——这过于简化,无法演示:

<body>
    <input id="myId" type="hidden" value="<%: ViewContext.RouteData.Values["id"].ToString() %>" />

...
<script language="text/javascript">
    function getId() {
        return document.getElementById("myId").value;
    }
</script>
</body>

...
函数getId(){
返回document.getElementById(“myId”).value;
}

我尝试了此操作,结果出现错误:
无法获取未定义或空引用的属性“值”
数据-
属性比隐藏字段更合适。我尝试了此操作,结果出现错误:
无法获取未定义或空引用的属性“值”
数据-
属性将更合适比隐藏字段更合适。我试图用引号将其括起来,但它仍然试图将其作为变量名传递。对不起,它确实有效,我努力刷新了我的页面,它也有效,有时我会因为我的愤怒而忘记做基本的事情,谢谢。我试图用引号将其括起来,但它仍然试图将其作为变量名传递。对不起,它确实有效,我努力刷新了我的页面,它工作了,有时我会因为我的愤怒而忘记做一些基本的事情,谢谢,对不起,它确实工作了,我努力刷新了我的页面,它工作了,有时我因为我的愤怒而忘了做一些基本的事情,仍然不得不选择一个正确的答案,并且不得不掷硬币来决定。不管怎样,谢谢。对不起,它确实有效,我努力刷新了我的页面,它有效了,有时我会因为恼怒而忘记做基本的事情,仍然必须选择正确的答案,并且必须掷硬币来决定。无论如何,谢谢。