0

ASP.NET MVCプロジェクトを使い始めたばかりで、基本を理解しましたが、最近問題が発生しました。ビューからIDとして文字列を渡すことができません。

これまでのところ、私は次のようなjavascript関数にIDを渡しています。

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

これを行っているのは、JavaScriptで送信やajax呼び出しなどの操作を実行するためにIDを操作する必要があるためです(私はjavascriptを使用することを好みます)。

これまでのところ、これはint値で機能しましたが、文字列を渡そうとすると失敗します。たとえば、このURL localhost:65097 / Device / Edit / D2C02にアクセスしようとすると、次のエラーが表示されます。

SCRIPT5009: 'D2C02' is undefined

生成されたhtmlコードを確認すると、関数の呼び出しは次のようになりました。

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

IDは、変数のようにD2C02だけでなく、文字列のように「D2C02」として渡されるべきではありませんか?それが私が理解していることなので、ブラウザはIDD2C02が表すと考えています。id値が文字列としてjavascript関数に渡されることを確認するにはどうすればよいですか?

4

3 に答える 3

2

ToString()何かを文字列に変換するだけですが、これはJS文字列ではなくC#文字列です。したがって、最も簡単な解決策は、値に引用符を含めることはできないと想定して引用符を追加することです。

<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 に答える