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'的定义没有扩展方法' Active'接受类型' CreateModel'的第一个参数。可以找到(你错过了使用指令或程序集引用吗?)
有什么想法吗?
我可能使用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");
}
}
}
答案 0 :(得分:12)
问题在于这一行:
@Html.DisplayNameFor(model => model.Active))
在使用Create.cshtml
的{{1}}中,model
指的是CreateModel
而不是Movie
。相反,你需要:
@Html.DisplayNameFor(model => model.Movie.Active))
答案 1 :(得分:1)
我在ASP.NET Core GitHub网站上提出了此错误,该错误已在.NET Core 2.0中修复: https://github.com/aspnet/Scaffolding/issues/830
但是,看起来该修补程序没有移植到2.1版,因此我在这里提出了一个新的错误: https://github.com/aspnet/Scaffolding/issues/855