2012-11-19 47 views
0

我們有一個約25個字段的表格。下面列出了一些字段。如何僅保存在ASP.NET MVP應用程序中更改的字段?

<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對象同步。病人存儲在會話中。

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

當前,每次發佈數據時,都會將每個字段保存到患者。有沒有辦法只保存已更改的項目?還是要跟蹤這裏的變化?我認爲這會提高效率?

回答

0

你可以寫這樣的事情每個字段:

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

這不會提高效率得多,雖然。這是一個簡單的方法。另一種方法是使用Javascript在客戶端上使用onchage事件追蹤< input>元素等,但這更加困難。問題在於需要花時間編程並稍後進行維護。最簡單的方法是用更改的數據保存未更改的數據。如果會出現性能問題,那麼您可以進行這些更改。希望這可以幫助。

0

真正實現你想要的東西的最好方法是使用第三方Javascript庫,比如Knockout。這基本上是因爲服務器不知道用戶何時更改瀏覽器中的內容,除非他提交了一些數據。要使用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")); ​ 

下面是一個使用淘汰賽來處理數據,因爲它改變了一個很好的例子:

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

0

在我看來,像不成熟的優化 - http://c2.com/cgi/wiki?PrematureOptimization。不要這樣做,直到你看到有一些真實的性能損失。如果您只保存已更改的項目,我認爲您幾乎不會注意到一些差異。最有可能你會讓你的代碼更不可讀。

相關問題