0

約 25 のフィールドを持つフォームがあります。以下にいくつかのフィールドを示します。

<div class="form-field">
    @Html.LabelFor(m => m.FormData.FirstName)
    @Html.TextBoxFor(m => m.FormData.FirstName)
</div>
<div class="form-field">
    @Html.LabelFor(m => m.FormData.LastName)
    @Html.TextBoxFor(m => m.FormData.LastName)
</div>
<div class="form-field">
    @Html.LabelFor(m => m.FormData.MiddleInitial)
    @Html.TextBoxFor(m => m.FormData.MiddleInitial, new { @class = "small" })
</div>

フォームの値を格納する FormData オブジェクトがあり、後で ModelState が有効な場合に患者オブジェクトと同期されます。患者はセッションに保存されます。

patient.FirstName = formData.FirstName;
patient.LastName = formData.LastName;
patient.MiddleInitial = formData.MiddleInitial;

現在、データが投稿されるたびに、すべてのフィールドが患者に保存されています。変更されたアイテムのみを保存する方法はありますか? または、ここで変更を追跡しますか? それが効率を向上させると思いますか?

4

3 に答える 3

0

フィールドごとに次のように記述できます。

if( !patient.FirstName.Equals(formData.FirstName, StringComparison.CurrentCultureIgnoreCase)) 
  patient.FirstName = formData.FirstName;

しかし、それは効率をあまり改善しません。これは簡単な方法です。もう 1 つの方法は、< input > 要素などの onchage イベントを使用して、クライアントで Javascript を使用して変更を追跡することですが、それはさらに困難です。問題は、それをプログラムして後で保守するのに時間がかかることです。最も簡単な方法は、変更されていないデータを変更されたデータとともに保存することです。パフォーマンスの問題がある場合は、これらの変更を行うことができます。お役に立てれば。

于 2012-11-19T20:06:47.723 に答える
0

目的を真に達成する最善の方法は、Knockout などのサードパーティの Javascript ライブラリを使用することです。これは基本的に、ユーザーがデータを「送信」しない限り、ユーザーがブラウザで何かを変更したことをサーバーが認識できないためです。KO.JS を使用するには、MVVM のアプローチも伝える必要があります。

次に、次のようなことができます。

@Html.TextBoxFor(m => m.FormData.LastName, new { data-bind="value: lastName"})

JS コードは次のようになります。

var ViewModel = function(first, last) {
    this.firstName = ko.observable(first);
    this.lastName = ko.observable(last);

    this.fullName = ko.computed(function() {
        return this.firstName() + " " + this.lastName();
    }, this);
};

ko.applyBindings(new ViewModel("FirstName", "LastName")); ​

以下は、Knockout を使用して、変更されたデータを処理する良い例です。

http://jsfiddle.net/rniemeyer/LkqTU/

于 2012-11-19T20:18:03.610 に答える
0

私には時期尚早の最適化のように思えます - http://c2.com/cgi/wiki?PrematureOptimization。実際にパフォーマンスが低下することがわかるまでは、これを行わないでください。変更された項目だけを保存すると、ほとんど違いに気付かないと思います。ほとんどの場合、コードが読みにくくなります。

于 2012-11-19T22:07:23.617 に答える