Asp.Net核心和脚手架

时间:2017-09-21 17:24:44

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

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");    
        }    
    }    
}

2 个答案:

答案 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

相关问题