3

WebMatrix Razor Syntax で Ajax と同じページで CRUD 操作 (Update-Edit-insert) を行うための最速かつ安全な方法は何かについて考えてみたいと思います。GET-POST Webサービスまたは他のかみそりページなしで、ajaxを使用して同じかみそりページでこのCRUD操作を行うことは可能ですか?

jquery ajaxを使用して、出力タイプがJsonの他のRazorページからPost-Getデータを取得し、WCF Webサービスも使用してみました。しかし、データを提供するには別のページが必要なため、それらは私を本当に満足させるものではありませんでした。

4

1 に答える 1

3

はい、できます。個別の CRUD 操作はそれぞれ、独自の条件付きブロックでラップする必要があります。条件は、特定の名前/値のペアが AJAX 経由でサーバーに送信されたかどうかをテストできます (例:action=deleteまたはaction=update)。値を AJAX 呼び出しに戻す場合ContentTypeは、Response の が正しく設定されていることを確認してください。

これが実際の例です -

@{
    if(IsAjax){
        switch(Request["action"]){
            case "create" :
                Response.Write("You are trying to create something");
                Response.End();
                break;
            case "read" :
                Response.Write("What would you like to read?");
                Response.End();
                break;
            case "update" :
                Response.Write("Something is being updated");
                Response.End();
                break;
            case "delete" :
                Response.Write("This is a delete");
                Response.End();
                break;
        }
    }
}

<!DOCTYPE html>

<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title></title>
        <script src="~/Scripts/jquery-1.8.3.min.js" type="text/javascript"></script>
        <script>
            $(function () {
                $('.crud').click(function () {
                    $.get('/SinglePage/?action=' + $(this).attr('id'), function (message) {
                        alert(message);
                    })
                })
            })
        </script>
    </head>
    <body>
        <button id="create" class="crud">Create</button>
        <button id="read" class="crud">Read</button>
        <button id="update" class="crud">Update</button>
        <button id="delete" class="crud">Delete</button>
    </body>
</html>

どちらかといえば、これは、このアプローチがメンテナンスなどの点でどれほど悪いかを示しています。私は常に、データ操作ごとに個別の cshtml ファイルを使用します。

于 2013-01-30T21:11:41.430 に答える