10

javascript コールバック関数をパラメーターとして受け取る拡張メソッドがありHtmlHelperます。たとえば、次のようになります。

@Html.SomethingCool("containerName", "jsCallbackFunction")

<script type="javascript">
    function jsCallbackFunction(e, i) {
        alert(e.target.name + ' / ' + i);
    }
</script>

ご覧のとおり、javascript コールバック関数名がHtmlHelper拡張メソッドに渡されます。これにより、開発者はドキュメントを参照して、jsCallbackFunction関数に必要なパラメーターを特定する必要があります。

私はむしろ次のようなものを好むでしょう:

@Html.SomethingCool("containerName", New SomethingCoolCallbackDelegate(Address Of jsCallbackFunction))

<OutputAsJavascript>
Private Sub jsCallbackFunction(e, i)
    '    SOMETHING goes here.  some kind of html dom calls or ???
End Sub

SomethingCoolCallbackDelegate、ターゲット関数のコード コントラクトを提供します。次に、コンパイラは MVC ページで jsCallbackFunction を javascript としてコンパイルします。

このようなものは .NET 4 / ASP.NET MVC 4 / Razor 2 に組み込まれていますか? または、同様のことを実現できる他のテクノロジーはありますか?

例は VB にありますが、C# のソリューションもまったく問題ありません。

説明:

@gideon:とjsCallbackFunctionの 2 つのパラメーターを取るeことに注意してくださいi。ただし、HtmlHelper 拡張メソッドは単に文字列 (javascript コールバック関数の名前) を要求するだけで、この関数が受け取る可能性のあるパラメーターを示しません。私が解決しようとしている問題は 2 つあります。

  • まず、不足しているパラメーターのヒント。「javascript コールバック名」文字列の代わりに渡される .NET デリゲート型は、これを実現します。これを達成するための他のソリューションを受け入れます。XML コメントについては承知しています。それらは実際には解決策ではありません。

  • 2 つ目は、ページ プログラマーが単一の言語で作業できるようにすることです。JavaScript と VB (または js と C#) を切り替えるには、(少なくとも私にとっては) 高価なコンテキスト スイッチが必要です。私の脳はすぐには移行しません。VB または C# で作業し続けると、生産性とコスト効率が向上します。したがって、.NET 言語で関数を記述し、それを ASP.NET MVC/razor ビューのコンテキストで JavaScript にコンパイルできるようにすることが、私が求めているものです。

@TyreeJackson:SomethingCoolは、HtmlHelperHTML と JavaScript を出力する拡張メソッドです。JavaScript 出力の一部は、ユーザー (プログラマー) が提供する関数を呼び出して、いくつかの決定を行う必要があります。ajax 呼び出しに提供する成功または失敗関数に似ていると考えてください。

4

3 に答える 3

0

まったく同じではありませんが、WebMethod および PageMethod 属性を使用すると、これをより管理しやすくすることができます。

javascript を使用して ASP.NET c# メソッドを呼び出す方法も参照してください。

WebBrowserコントロールを使用してオブジェクトの実装を作成することもできます。これNode.jsは、ほとんどの場合と同じようになります。

Web ブラウザ コントロールから Javascript 変数を読み取るも参照してください。

于 2015-07-31T21:59:22.683 に答える
0

これが私の SignalR 実装 test( please read the comments in the question) です。

チャットハブ クラス:

 Public Class ChatHub : Inherits Hub
    Public Sub MyTest(ByVal message As String)
        Clients.All.clientFuncTest("Hello from here, your message is: " + message)
    End Sub
 End Class

クライアント側:

 $(function () {
        // Reference the auto-generated proxy for the hub.
        var chat = $.connection.chatHub;
        //reference to Clients.All.clientFuncTest
        chat.client.clientFuncTest = function(messageFromServer){
            alert(messageFromServer);
        }

        // Start the connection.
        $.connection.hub.start().done(function () {
            //Reference to Public Sub MyTest
            chat.server.myTest("this is a test");
        });
  });

これにより、私のサイトで次の出力が生成されます。

ここに画像の説明を入力

于 2015-08-03T16:44:12.480 に答える