我對未從模型中的規則驗證的業務規則進行了驗證,但遇到了使其工作的問題。由於有兩種可能的情況(客戶或賣家註冊),因此需要在他們自己的觀點和模型中分別對待。賣家註冊從基本信息的客戶註冊繼承,所以客戶中的所有字段也都在賣家中。但是由於我正在使用兩種不同的模型,即使兩者的字段都與我正在進行驗證的字段相同,我也需要使用Object
來使用相同的驗證方法。但不幸的是我很難這樣做。根據其類型鑄造對象
[CustomHandleError]
private bool ValidateRegistrationForm (Object registerViewModelObject) {
if (registerViewModelObject is RegisterViewModel)
{
RegisterViewModel registerViewModel =
(RegisterViewModel)registerViewModelObject;
}
else
{
RegisterSellerViewModel registerViewModel =
(RegisterSellerViewModel)registerViewModelObject;
}
if (ModelState.IsValid)
{
string [] names = registerViewModel.Name.Split (
new string [] {" "}, StringSplitOptions.RemoveEmptyEntries);
if (names.Length == 1)
ModelState.AddModelError ("Name", "Fill your full name");
if (CustomerUtilities.IsCpf (registerViewModel.Identity) == false)
ModelState.AddModelError ("Identity", "Invalid CPF value");
if (this.AuthenticatorService.IsExistentUser (registerViewModel.Email))
ModelState.AddModelError ("Email", "Email already registered");
}
}
正如你所看到的,if (ModelState.IsValid)
後,智能感知不會在目前情況下找到registerViewModel。我想知道爲什麼會發生這種情況,因爲該變量是在if和else之間定義的,所以如果沒有定義它,就無法達到該代碼。
是否有任何解決方法(除了創建一個新的方法或傳遞2個變量)?
將您的代碼作爲文本粘貼到此處,而不是圖像。 – 2013-02-18 20:12:19
將代碼粘貼爲代碼塊可以讓您獲得更好的答案,因爲爲您生成正確的示例會更容易。 – driis 2013-02-18 20:14:47
快速修復是將代碼複製並粘貼到if和else塊中。問題在於沒有用於註冊的公共基類,或者繼承沒有被正確使用(賣方註冊似乎不是一種客戶註冊,因此繼承會變得很難)。你必須做一些設計工作來解決這個問題。 – 2013-02-18 20:19:18