2009-12-09 14 views
0

假設我有一個強類型爲「MyData」的表的編輯視圖。該視圖具有多個選項卡,每個選項卡都具有表格中的幾個不同字段。爲了提高性能,僅在查看標籤頁時才加載數據,因此如果僅編輯標籤頁1上的字段並提交表單,標籤頁2的數據將不會被加載。當並非所有字段都加載時,在強類型視圖上保存數據的最佳方式

我遇到的問題是提交。我做的查找數據庫中的現有記錄和更新傳遞的值的典型程序:

<AcceptVerbs(HttpVerbs.Post)> _ 
Function Edit(ByVal data As MyData) As ActionResult 

    Using dc = New MyDataContext 
     Dim orig = dc.MyDatas.Single(Function(x) x.id = data.id) 
     orig.name = data.name 
     orig.desc = data.desc 
     ... 
     SubmitChanges() 
    End Using 

    Return View(orig) 

End Function 

然而,這種方法不知道加載哪些選項卡,所以如果對「遞減」的標籤它沒有加載,這個方法認爲用戶清除了「desc」字段,並向數據庫發送NULL。

我怎樣才能構造這個,只有加載的字段被髮送到數據庫,並且卸載的字段被忽略?

回答

1

有什麼理由不使用UpdateModel(orig)

如果您使用的是模型綁定,而不是通過手動瀏覽表單內容並分配值,這將爲您照顧。默認的模型綁定行爲是忽略沒有相應表單值的屬性。

您可能想看看this post以及其中鏈接的文章,以瞭解有關模型綁定的更多信息。

+0

我假設你不是指「UpdateModel(orig)」,因爲它沒有引用任何表單數據,但是我將如何從我的原始示例中設置它?它會是「UpdateModel(數據)」嗎?當我嘗試時,我得到一個無益的「MyProject.MyData類型的模型沒有成功更新。」 – gfrizzle 2009-12-09 21:52:20

0

也許一個ViewModel模式可以幫助你在這裏,你屬於你喜歡的選項卡原始模型的意見是這樣的:

public class Tab1 
    { 
     public string pproperty1 { get; set; } 
     public string pproperty2 { get; set; } 
    } 
    public class Tab2 
    { 
     public string pproperty3 { get; set; } 
     public string pproperty4 { get; set; } 
    } 
    public class Tab3 
    { 
     public string pproperty5 { get; set; } 
     public string pproperty6 { get; set; } 
    } 
    public class ViewModels 
    { 
     public Tab1 TAB1 { get; set; } 
     public Tab2 TAB2 { get; set; } 
     public Tab3 TAB3 { get; set; } 
    } 

所以當你綁定發佈值如果Tab2 == null那麼你知道,這個性質沒有加載也沒有被用戶改變。

PD:對不起,c#,它是一個時間看到我vb編碼。

0

我會建議有一個單獨的操作方法,每個選項卡只是更新該選項卡上的字段。然後每個選項卡上的表單就會提交給相應的操作。

相關問題