2011-11-20 48 views
1

我想了解Orchard MVC應用程序。我看到下面的代碼,但不明白它在做什麼。有人可以解釋這是什麼:在MVC應用程序中設置變量?

User.As<UserPart>().Record.UserName = value; 

是否意味着?

public class UserEditViewModel { 
    [Required] 
    public string UserName { 
     get { return User.As<UserPart>().Record.UserName; } 
     set { User.As<UserPart>().Record.UserName = value; } 
    } 

    [Required] 
    public string Email { 
     get { return User.As<UserPart>().Record.Email; } 
     set { User.As<UserPart>().Record.Email = value; } 
    } 

    public IContent User { get; set; } 
} 
+2

您可能需要閱讀有關泛型。 – SLaks

+0

學習MVC和新的CMS應用程序的最佳方式是在您的代碼中放置一個良好位置的斷點,並查看callstack(或堆棧跟蹤),以瞭解控制流。並且看着CMS來源本身。 – Zasz

回答

0

不知道來源,它看起來像調用As<type>()相當於obj as type

即,對象正投作爲這種情況下的type - UserPart。所以User定義爲IContent,但在這種情況下,假設實現該接口的類是UserPart類型,並且可以安全地轉換爲該類型。

所以User.As<UserPart>()返回一個UserPart類型的對象,它可能有一個屬性Record上。

對我來說這似乎很奇怪,因爲如果將實現綁定到UserPart類型,爲什麼要抽象出IContent接口,但是我再也不知道代碼,它在更大的上下文中很有意義。

編輯:我說搭售的實施,因爲那時User.As<UserPart>()可以返回null如果底層類是UserPart,而且也沒有檢查了點。

+0

...它可能不會:) –

0

在我看來,這個viewmodel用於編輯當前登錄的用戶的詳細信息。

User.As<UserPart>().Record.UserName = value;

第1部分是User.As<UserPart>() - 這在我看來就像UserPart類型是通過對用戶類的靜態方法調用創建的C#對象,該對象包含可能的登錄用戶的詳細信息。我懷疑它訪問HttpContext.CurrentControllerContext的Request屬性,以知道當前用戶是誰並獲取他的詳細信息。一旦獲取代表當前登錄用戶.Record.UserName = valueUserPart對象,只需在對象上設置傳入值即可。

value是C#中所有設置方法的隱含參數。

ViewModel的setter通常在actioninvoking之前的Request的modelbinding期間綁定模型時調用。渲染視圖時通常會調用getters。

如果你仍然覺得很難在Orchid Documentation或在Source Code本身瞭解一下

相關問題