的ASP.NET MVC UpdateModel我想讓UpdateModel填充一個在編譯時只被設置爲一個接口的模型。例如,我有:帶有接口
// View Model
public class AccountViewModel {
public string Email { get; set; }
public IProfile Profile { get; set; }
}
// Interface
public interface IProfile {
// Empty
}
// Actual profile instance used
public class StandardProfile : IProfile {
public string FavoriteFood { get; set; }
public string FavoriteMusic { get; set; }
}
// Controller action
public ActionResult AddAccount(AccountViewModel viewModel) {
// viewModel is populated already
UpdateModel(viewModel.Profile, "Profile"); // This isn't working.
}
// Form
<form ... >
<input name='Email' />
<input name='Profile.FavoriteFood' />
<input name='Profile.FavoriteMusic' />
<button type='submit'></button>
</form>
另外請注意,我有一個從DefaultModelBinder繼承使用自定義模型粘合劑用於填充IProfile與在被覆蓋的CreateModel方法的StandardProfile的實例。
問題是FavoriteFood和FavoriteMusic從不填充。有任何想法嗎?理想情況下,這將全部在模型聯編程序中完成,但是我不確定在沒有編寫完全自定義的實現的情況下是可能的。
感謝布
空的接口允許我在每個站點上重複使用相同的核心代碼,同時使用IOC提供不同的配置文件類型。我可能能夠嘗試一個基類而不是一個接口來達到這個目的,但我只是不確定我還能做什麼,這給了我所尋找的靈活性。我會研究你提到的ModelType。 – 2009-09-09 17:35:58
空的基類對你來說也不會有太大的好處。因此,在您的CreateModel方法的代碼中,您調用的是如下所示的代碼:IoC.GetInstance()您插入了哪個返回新的StandardProfile?有趣的:)。我仍然不清楚當使用IProfile的任何東西必須首先將它轉換爲正確的類時,您可以獲得多少代碼重用,但是,我認爲在綁定上下文中指定Type將起作用。 –
anonymous
2009-09-09 19:24:39
重複使用來自於我的許多站點的控制器都在我參考的常見組件中。我建立的每個站點都引用了這個用於控制器和模型的公共組件然後,我可以爲每個站點添加其他控制器,模型,視圖等。在這種情況下,我需要能夠逐個網站地定義完全不同的配置文件字段。因此這裏只需要一個接口。 – 2009-09-09 19:37:12