【问题标题】:Asp.Net Core and ScaffoldAsp.Net 核心和脚手架
【发布时间】:2018-03-03 03:41:35
【问题描述】:

Asp.Net Razor Page的自动脚手架生成是否兼容bool数据类型?

我问这个问题,因为我正在学习本教程:https://docs.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/model。在某个时刻,在创建 POCO 类、配置 dbContext 和迁移之后,我运行了这个命令来自动生成脚手架

dotnet aspnet-codegenerator razorpage -m Movie -dc MovieContext -udl -outDir Pages\Movies --referenceScriptLibraries

它很漂亮,但如果我的 POCO 类没有 bool 类型,它就可以工作。

示例 POCO 类:

using System;

namespace RazorPagesMovie.Models
{
    public class Movie
    {
        public int ID { get; set; }
        public string Title { get; set; }
        public DateTime ReleaseDate { get; set; }
        public string Genre { get; set; }
        public bool Active { get; set; }
    }
}

通过这个实现,当我尝试创建电影时,我会得到这个错误:

“CreateModel”不包含“Active”的定义,并且找不到接受“CreateModel”类型的第一个参数的扩展方法“Active”(您是否缺少 using 指令或程序集引用?)

有什么想法吗?

也许是我使用 SQLite 作为数据库这一事实的必要信息...

还有 CreateModel 类:

using System;    
using System.Collections.Generic;    
using System.Linq;    
using System.Threading.Tasks;    
using Microsoft.AspNetCore.Mvc;    
using Microsoft.AspNetCore.Mvc.RazorPages;    
using Microsoft.AspNetCore.Mvc.Rendering;    
using RazorPagesMovie.Models;

namespace RazorPagesMovie.Pages.Movies    
{    
    public class CreateModel : PageModel    
    {    
        private readonly RazorPagesMovie.Models.MovieContext _context;    

        public CreateModel(RazorPagesMovie.Models.MovieContext context)    
        {    
            _context = context;    
        }        

        public IActionResult OnGet()    
        {    
            Movie = new Movie    
            {    
                Title = "The Good, the bad, and the ugly",    
                Genre = "Western",    
                Price = 1.19M,    
                ReleaseDate = DateTime.Now,    
                Active = true    
            };    
            return Page();    
        }        

        [BindProperty]    
        public Movie Movie { get; set; }    

        public async Task<IActionResult> OnPostAsync()    
        {    
            if (!ModelState.IsValid)    
            {    
                return Page();    
            }    

            _context.Movie.Add(Movie);    
            await _context.SaveChangesAsync();    

            return RedirectToPage("./Index");    
        }    
    }    
}

【问题讨论】:

  • CreateModel 类的外观如何?您在此处添加了 Movie 类。
  • 示例可以在github.com/aspnet/Docs/blob/master/aspnetcore/tutorials/… 下载,但是必须将 DbContext 更改为 SQLite 并将 POCO 的一个属性更改为 bool
  • 除了您显示的代码之外,您引用Active 的代码中还有其他地方吗?这似乎是一个编译问题,那么它到底出现在哪里?
  • 它出现在网页中,当我点击创建链接时,它是由脚手架创建的。

标签: c# asp.net razor asp.net-core scaffolding


【解决方案1】:

问题出在这一行:

@Html.DisplayNameFor(model => model.Active))

Create.cshtml 中,model 指的是CreateModel,而不是Movie。相反,您需要:

@Html.DisplayNameFor(model => model.Movie.Active))

【讨论】:

    【解决方案2】:

    我在 ASP.NET Core GitHub 站点上提出了这个错误,它在 .NET Core 2.0 中得到了修复: https://github.com/aspnet/Scaffolding/issues/830

    但是,它看起来好像没有将修复程序移植到 2.1,所以我在这里提出了一个新错误: https://github.com/aspnet/Scaffolding/issues/855

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-14
      • 1970-01-01
      • 2014-10-27
      • 1970-01-01
      • 2011-10-23
      • 2017-04-02
      相关资源
      最近更新 更多