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