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

时间:2013-01-25 19:05:48

标签: javascript asp.net asp.net-mvc-4

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

到目前为止,我一直将id传递给这样的javascript函数:

<script>app.init( <%: ViewContext.RouteData.Values["id"].ToString() %>)</script>

这会调用以下javascript函数:

var app = {};
(function (app) {
    var _id;
    app.init = function (id) {
        _id = id;
    }
    app.id = function () {
        return _id;
    }
})(app);

我这样做是因为我需要使用id来执行javascript中的提交和ajax调用等操作(我更喜欢使用javascript)。

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

SCRIPT5009: 'D2C02' is undefined

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

<script>app.init(D2C02)</script>

不应该将id作为字符串传递为'D2C02',而不是像变量一样传递给D2C02吗?因为这是我正在使用的,浏览器认为ID为D2C02代表。如何确保将id值作为字符串传递给javascript函数?

3 个答案:

答案 0 :(得分:2)

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

<script>app.init("<%: ViewContext.RouteData.Values["id"].ToString() %>")</script>

如果它可能包含引号,您可以执行简单替换反斜杠 - 转义它们,或者通过JSON序列化程序运行字符串,该序列化程序负责将其转换为有效的JavaScript字符串。

答案 1 :(得分:1)

尝试

app.init( “&LT;%......%&gt;” 中);

否则您只是在变量名称而不是字符串中发布。 c#中的ToString()方法不会将引号包装在

答案 2 :(得分:0)

我将使用的方法是做这样的事情,使事情更加语义化 - 这过于简化以证明:

<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>