未将对象引用设置为对象的实例. [英] Object reference not set to an instance of an object ViewData["Title"] = "Index";

查看:253
本文介绍了未将对象引用设置为对象的实例.的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

因此,我尝试使用模式在索引页面中创建一个注册剃刀页面.我导入到模式中的大多数表单代码都来自现有的外部寄存器页面.但是,当我启动mvc应用程序时,出现了Object reference not set to an instance of an object错误.任何帮助,将不胜感激.谢谢!

So I'm trying to create a register razor page in my index page using a modal. Most of the form code that I imported into the modal is from the existing external register page. When I start up the mvc app, though, I receive a Object reference not set to an instance of an object error. Any help would be appreciated. Thanks!

控制台:

System.NullReferenceException: Object reference not set to an instance of an object.at AspNetCore.Views_Home_Index.ExecuteAsync() in C:\Users\SalvadorSolis\source\repos\AWSCognitoMVC\AWSCognitoMVC\Views\Home\Index.cshtml:line 4

HTML:

@page
@model AWSCognitoMVC.Views.Home.IndexModel
@{
    ViewData["Title"] = "Index";//line 4
}
<h2>@ViewData["Title"]</h2>

型号:

namespace AWSCognitoMVC.Views.Home
{
    [AllowAnonymous]
    public class IndexModel : PageModel
    {
        private readonly SignInManager<CognitoUser> _signInManager;
        private readonly CognitoUserManager<CognitoUser> _userManager;
        private readonly ILogger<IndexModel> _logger;
        private readonly CognitoUserPool _pool;

        public IndexModel(
            UserManager<CognitoUser> userManager,
            SignInManager<CognitoUser> signInManager,
            ILogger<IndexModel> logger,
            CognitoUserPool pool)
        {
        _userManager = userManager as CognitoUserManager<CognitoUser>;
        _signInManager = signInManager;
        _logger = logger;
        _pool = pool;
    }

    [BindProperty]
    public InputModel Input { get; set; }

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

        [Required]
        [StringLength(15, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 10)]
        [Phone]
        [Display(Name = "Phone Number")]
        public string PhoneNumber { get; set; }

        [Required]
        [Display(Name = "User Name")]
        public string UserName { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} 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; }
    }
    public void OnGet()
    {
    }

    public async Task<IActionResult> OnPostAsync(string returnUrl = null)
    {
        //Added because users don't usually add in a + in their phone number
        if (!(Input.PhoneNumber.First() == '+'))
        {
            Input.PhoneNumber = "+" + Input.PhoneNumber;
        }
        //Added because users don't usually add in a + in their phone number

        returnUrl = returnUrl ?? Url.Content("~/");
        if (ModelState.IsValid)
        {
            var user = _pool.GetUser(Input.UserName);

            user.Attributes.Add(CognitoAttributesConstants.Email, Input.Email);
            user.Attributes.Add(CognitoAttributesConstants.PreferredUsername, Input.UserName);
            user.Attributes.Add(CognitoAttributesConstants.PhoneNumber, Input.PhoneNumber);

            var result = await _userManager.CreateAsync(user, Input.Password);
            if (result.Succeeded)
            {
                _logger.LogInformation("User created a new account with password.");

                await _signInManager.SignInAsync(user, isPersistent: false);

                return RedirectToPage("./ConfirmAccount");
            }
            foreach (var error in result.Errors)
            {
                ModelState.AddModelError(string.Empty, error.Description);
            }
        }
        return Page();
    }
}
}

HomeController:

namespace AWSCognitoMVC.Controllers
{
    public class HomeController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }

        public IActionResult Privacy()
        {
            return View();
        }

        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
        public IActionResult Error()
        {
            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }
    }
}

注意::原始注册模型未定义标题",因此可以正常工作.

Note: The original Register Model did not have the "Title" defined and somehow worked fine.

推荐答案

您正在尝试混合控制器&查看带有剃须刀页面的方法.只是不做.如果要使用剃须刀页面,请在项目的根目录中创建Pages文件夹,然后在此处创建剃须刀页面.如果要通过/home/index网址显示剃刀页面的视图,请在Pages文件夹中创建Home文件夹,然后在其中添加IndexModel.

You are trying to mix controller & view approach with razor pages. Just don't do it. If you want to use razor pages create Pages folder in the root of the project and create your razor pages there. If you want to display razor page's view by /home/index url create Home folder in Pages folder and add your IndexModel there.

Pages\Home\Index.cshtml

了解更多信息 查看全文

相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆