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