【ASP.NET MVC】【VB】ASP.NET MVC で変更検知を考える ~簡易版~

はじめに

 * ASP.NET MVC で変更検知(ダーティ・チェック)を実装してみる
 * 無駄な通信を極力避けるため、サーバ側でのチェックを行わず、
   クライアント側(JavaScript)のみで実装する
 * 「簡易版」「knockout.js利用版」「hiddenを使った版」を作ってみた
  => できれば、「knockout.js利用版」が一番スマートかと。

サンプル

 * 以下の関連記事を元にしている。ビュー以外のモデル、コントローラについては以下を参照。
http://blogs.yahoo.co.jp/dk521123/35956746.html

■簡易版

 * 変更したら、問答無用に変わったと判断。
ビュー:Index.vbhtml
@ModelType WebAppli.Models.EmployeeListModel

@Code
    ViewData("Title") = "Index"
    Dim index As Integer = 0
End Code

@Using (Html.BeginForm("SendResult", "SampleMvc", FormMethod.Post, New With {.Id = "formID"}))
    @<table>
        <thead>
            <tr>
                <th>Delete?</th>
                <th>ID</th>
                <th>Name</th>
            </tr>
        </thead>
        <tbody>
            @For index = 0 To Model.Employees.Count - 1 Step 1
                @<tr>
                   <td>@Html.CheckBoxFor(Function(model) model.Employees(index).IsChecked)</td>
                   <td>@Html.TextBoxFor(Function(model) model.Employees(index).EmployeeId)</td>
                   <td>@Html.TextBoxFor(Function(model) model.Employees(index).EmployeeName)</td>
                </tr>
            Next
        </tbody>
    </table>
    @<input type="submit" value="Send" />
    @<a href="http://www.yahoo.co.jp/" onclick="return checkToChangeValues()">Go yahoo!</a>
End Using
<script type="text/javascript">
    var hasChanged = false;
    $('#formID input').change(function () {
        hasChanged = true;
    });

    function checkToChangeValues() {
        if (hasChanged === true) {
            return confirm(
                'You have some changes.\nAre you sure you want to go to the other pages?');
        }
        return true;
    };
</script>

長くなったので、knockout.js利用版 は以下の関連記事に記載
http://blogs.yahoo.co.jp/dk521123/35964974.html


関連記事

ASP.NET MVC でリストのモデルを表示する

http://blogs.yahoo.co.jp/dk521123/35956746.html

knockout.js を使った変更検知(ダーティ・チェック)を考える [2]

http://blogs.yahoo.co.jp/dk521123/35949660.html

JavaScript で、Booleanに変換した際の注意事項

http://blogs.yahoo.co.jp/dk521123/35620716.html

ASP.NET MVC で変更検知を考える ~knockout.js利用版~

http://blogs.yahoo.co.jp/dk521123/35964974.html

ASP.NET MVC で変更検知を考える ~hiddenを使った版~

http://blogs.yahoo.co.jp/dk521123/35967929.html