我为未根据模型中的规则验证的业务规则制定了验证方法,但我在使其工作时遇到了问题。由于存在两种可能的场景(客户或卖家注册),因此需要在各自的 View 和模型中分别对待。卖家注册继承了客户注册的基本信息,因此客户中的所有字段也都在卖家中。但是由于我使用的是 2 个不同的模型,即使它们具有相同的字段来进行验证,我也需要使用 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)
之后,IntelliSense 在当前上下文中找不到 registerViewModel。我想知道为什么会发生这种情况,因为该变量是在上面的 if 和 else 中定义的,所以如果不定义它就无法访问该代码。
是否有任何解决方法(除了创建新方法或传递 2 个变量)?
最佳答案
在 if block 范围外声明 RegisterViewModel
,并在 if block 内分配它。
RegisterViewModel registerViewModel;
if (registerViewModelObject is RegisterViewMOdel)
{
registerViewModel = // ...
}
else
{
registerViewModel = // ...
}
关于c# - 根据其类型类型转换对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14944463/