【问题标题】:ArgumentNullException : Value cannot be null. Parameter name : viewDataArgumentNullException :值不能为空。参数名称:viewData
【发布时间】:2018-09-29 17:31:31
【问题描述】:

我有这样的简单登录页面:

登录.cshtml

@page
@model GDPR.Views.Account.LoginModel
@{
}

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers


<html>
<body>
    <p>Login </p>
    <form method="post">
        <div asp-validation-summary="All"></div>
        Username: <input asp-for="loginData.Username" value="username" /><br />
        Password: <input asp-for="loginData.Password" value="password" /><br />
        <br />
        <input type="submit" value="Login" />
        @Html.AntiForgeryToken()
    </form>
</body>
</html>

和后面的代码:

public class LoginModel : PageModel
{
    [BindProperty] // Bind on Post
    public LoginData loginData { get; set; }

    public async Task<IActionResult> OnPostAsync()
    {
        if (ModelState.IsValid)
        {
          .......
            await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal);
            return RedirectToPage("/Home/Index");
        }
        else
        {
            ModelState.AddModelError("", "username or password is blank");
            return Page();
        }
    }


    public class LoginData
    {
        [Required]
        public string Username { get; set; }

        [Required, DataType(DataType.Password)]
        public string Password { get; set; }
    }
}

当我运行应用程序时出现错误:ArgumentNullException value cannot be null, param name : viewData.

该错误的原因可能是什么?

【问题讨论】:

  • 我在 ViewComponent 中使用 asp-for 时遇到了同样的错误。在 ViewComponent 中添加 @addTagHelper 没有帮助。如果我在 Razor 页面中,我不会收到错误消息。

标签: razor asp.net-core-mvc


【解决方案1】:

尝试更改:asp-for="loginData.Username"asp-for="Model.loginData.Username"

【讨论】:

  • 越南,它没有帮助。
【解决方案2】:

它可能为 null,因为视图模型的命名空间尚未添加到 _viewImports。

将命名空间添加到_viewImports,以便应用程序可以使用剃须刀页面后面的模型。

希望这会有所帮助。

以下是关于 Razor 页面的一些信息:

https://docs.microsoft.com/en-us/aspnet/core/mvc/razor-pages/?view=aspnetcore-2.1&tabs=visual-studio

【讨论】:

    【解决方案3】:

    您在第一行的@page 为空,这是导致错误的原因。删除@page 语句或使用它来定义要显示的页面。

    【讨论】:

    • 我遇到了同样的问题,“或使用它来定义要显示的页面”是什么意思?我需要@page,因为部分视图的页面模型有一个发布操作
    • 如何在不删除@page 的情况下解决这个问题?
    【解决方案4】:

    查看页面顶部并删除指令@Page,@page 需要一个请求,它会像 MVC 一样转动页面。这是一个很好的教程。 https://docs.microsoft.com/en-us/aspnet/core/razor-pages/?view=aspnetcore-2.2&tabs=visual-studio

    【讨论】:

    • 最好添加您的答案示例。
    【解决方案5】:

    虽然从文件中删除 @page 不会引发错误,但如果您从 Controller 呈现 PageModel,则 PageModel 不会正确初始化。您的 Get 和 Post 函数也不会触发。

    为您的 PageModels 创建一个单独的文件夹

    /Pages ..../Login.cshtml ..../Logoin.cshtml.cs

    【讨论】:

      【解决方案6】:

      根据您的代码描述,我可以说您正在使用 .Net Core MVC 并且您正在尝试执行您的登录页面。

      @page 指令是正确的,没有问题。似乎您没有正确配置您的 Startup.cs。试试下面的代码:

      对于 ASP .Net Core 3.1

      public void ConfigureServices(IServiceCollection services)
          {
              services.AddRazorPages();
          }
      

      在配置中:

      app.UseEndpoints(endpoints =>
              {
                  endpoints.MapRazorPages();
              });
      

      它看起来像:

      public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
          {
              if (env.IsDevelopment())
              {
                  app.UseDeveloperExceptionPage();
              }
              else
              {
                  app.UseExceptionHandler("/Error");
                  app.UseHsts();
              }
      
              app.UseHttpsRedirection();
              app.UseStaticFiles();
      
              app.UseRouting();
      
              app.UseAuthorization();
      
              app.UseEndpoints(endpoints =>
              {
                  endpoints.MapRazorPages();
              });
          }
      

      对于 ASP .Net Core 2.2

      public class Startup
      {
          public void ConfigureServices(IServiceCollection services)
          {
              // Includes support for Razor Pages and controllers.
              services.AddMvc();
          }
      
          public void Configure(IApplicationBuilder app)
          {
              app.UseMvc();
          }
      }
      

      执行你的代码,应该没有错误。

      【讨论】:

        猜你喜欢
        • 2019-11-26
        • 2015-07-25
        • 2015-07-17
        • 1970-01-01
        • 2015-01-19
        • 2019-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多