c# - 根据其类型类型转换对象

标签 c# asp.net-mvc model casting

我为未根据模型中的规则验证的业务规则制定了验证方法,但我在使其工作时遇到了问题。由于存在两种可能的场景(客户或卖家注册),因此需要在各自的 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/

相关文章:

c# - Base64 图像未显示在 asp.net mvc View 中

python - 用 pre_save() 填充 django 字段?

python - Django 访问 OneToOneField

php - 在PHP中进行模型验证的最佳方法?

c# - 配置 GetSection 返回对象部分的空值

javascript - Unity C# 如何正确加载托管 DLL?

c# - “BeginContext”在应用程序启动时的当前上下文错误中不存在

c# - 如何在 Nancy.Swagger 包构建的 Swagger-UI 中添加参数示例值?

c# - 有什么方法可以查看 C# 应用程序的泄漏内存?

asp.net-mvc - 使用 ViewModel 有意义吗