【问题标题】:How to pass a string as a parameter into a javascript function from a View?如何将字符串作为参数从视图传递到 javascript 函数中?
【发布时间】:2013-01-25 19:05:47
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 我试图用引号括起来,但它仍然试图将它作为变量名传递
    • 很抱歉,它确实有效,我努力刷新了我的页面并且它有效,有时我因为生气而忘记做基本的事情,谢谢
    【解决方案2】:

    试试

    app.init("");

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

    【讨论】:

    • 对不起,它确实有效,我努力刷新了我的页面并且它有效,有时我因为生气而忘记做基本的事情,仍然必须选择正确的答案并且不得不翻转一枚硬币来决定。无论如何,谢谢。
    【解决方案3】:

    我将使用的方法是做这样的事情,让事情变得更加语义化——这被过度简化来演示:

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

    【讨论】:

    • 我试过了,但报错:Unable to get property 'value' of undefined or null reference
    • data- 属性比隐藏字段更合适。
    猜你喜欢
    • 2011-10-17
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-02
    相关资源
    最近更新 更多