C# 向控制器传递参数时为Null对象

C# 向控制器传递参数时为Null对象,c#,asp.net-mvc,parameter-passing,C#,Asp.net Mvc,Parameter Passing,我使用了Asp.Net帐户注册控制器和视图模型,并尝试对它们进行一些更改,以执行以下操作。用户注册帐户后,会被重定向到下一页,并带有两个复选框,用户必须在其中选择是想成为卖家还是买家。提交后,将在数据库中为其分配一个编号。以下是我目前掌握的代码: 视图模型 public class RegisterViewModel { [Required] [EmailAddress] [Display(Name = "Email")] public string Email

我使用了Asp.Net帐户注册控制器和视图模型,并尝试对它们进行一些更改,以执行以下操作。用户注册帐户后,会被重定向到下一页,并带有两个复选框,用户必须在其中选择是想成为卖家还是买家。提交后,将在数据库中为其分配一个编号。以下是我目前掌握的代码:

视图模型

public class RegisterViewModel
{
    [Required]
    [EmailAddress]
    [Display(Name = "Email")]
    public string Email { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 8)]
    [Display(Name = "UserName")]
    public string UserName { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Confirm password")]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }

    //[Required]
    //[Display(Name = "Date Of Birth")]
    public DateTimeOffset UserDOB { get; set; }

    public int? UserRole { get; set; }
    public AspNetUser AspNetUser { get; set; }
    public int Id { get; set; }
    public bool buyer { get; set; }
    public bool seller { get; set; }
}
这是我的注册控制器:

public async Task<ActionResult> Register(RegisterViewModel model, ApplicationUser test)
    {
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser { UserName = model.UserName, Email = model.Email, UserDOB = model.UserDOB };
            var result = await UserManager.CreateAsync(user, model.Password);
            if (result.Succeeded)
            {
                await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);

                return RedirectToAction("Choice", "RoleSelection", new { Id = Guid.NewGuid()});
            }
            AddErrors(result);
        }


        return View(model);
    }

我的猜测是route参数、您要传递的内容和预期模型之间存在类型不匹配

Register
中,您将带有
Guid
Id
的匿名对象传递给
选项
。但是
Choice
需要一个类型为
RegisterViewModel
的模型和一个
字符串
Id

一种解决方法是将您的
选择
签名更改为

Choice(RegisterViewModel model, Guid Id)
您可以使用

RedirectToAction("Choice", "RoleSelection", new {model, Id = Guid.NewGuid()})

嗯,
model
在重定向之后肯定会是
null
,因为没有任何东西将该信息传递给下一个操作。但是你是说
Id
也是
null
?你能在你的浏览器中调试看看实际的重定向URL是什么吗?考虑到这个主题,我猜你正在使用控制器方法,但我不完全确定这是否发生了。你能描述一下问题是什么,你的问题是什么吗?您是否正在使用断点访问控制器方法?哪些参数为空,等等。谢谢你这么快回复我。也许我需要通过重定向来传递模型?我可以这样做吗?你的代码没有多少意义。您的视图模型不应包含
AspNetUser AspNetUser
int-Id
(您正在注册一个新用户,因此这些内容甚至还不存在)。您的POST方法中的
ApplicationUser test
参数是什么?然后重定向到
Choice()
方法,向它传递一个新的
Guid
,它与任何东西都没有关系(它是干什么用的,而且你从来没有使用过它?)。从这一点上,您可以发回
RegisterViewModel
,但您的视图不是基于
RegisterViewModel
,用户是“买家”还是“卖家”,那么为什么您有2个
bool
属性?您甚至不考虑用户选中两个复选框的情况。为什么您需要一个单独的视图来选择它(而不是只在初始视图中包含它)。
RedirectToAction("Choice", "RoleSelection", new {model, Id = Guid.NewGuid()})