0

我刚刚开始使用 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 函数?

4

3 回答 3

2

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

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

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

于 2013-01-25T19:07:53.070 回答
1

尝试

app.init("<%......%>");

否则,您只是在发布变量名而不是字符串。c# 中的 ToString() 方法不会将值用引号括起来

于 2013-01-25T19:13:14.370 回答
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>
于 2013-01-25T19:13:33.500 回答