空引用但数据库有数据

问题描述 投票:0回答:1

我在课程视图中显示级别和雕像时遇到问题enter image description here

这是我的问题,数据库确实有数据,但是在添加课程服务时,它在

post
方法中返回null。

这是我的

AddCourse
方法:

public int AddCourse(Course course, IFormFile imgCourse, IFormFile courseDemo)
{
    course.CreateDate = DateTime.Now;
    course.CourseImageName = "no-photo.jpg";
    
    // TODO Check Image
    if (imgCourse != null && imgCourse.IsImage())
    {
        course.CourseImageName = NameGenerator.GenerateUniqCode() + Path.GetExtension(imgCourse.FileName);
        string imagePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/Course/Image", course.CourseImageName);

        using (var stream = new FileStream(imagePath, FileMode.Create))
        {
            imgCourse.CopyTo(stream);
        }

        ImageConvertor imgResizer = new ImageConvertor();
        string thumbPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/Course/Thumb", course.CourseImageName);

        imgResizer.Image_resize(imagePath, thumbPath, 150);
    }

    if (courseDemo != null)
    {
        course.DemoFileName = NameGenerator.GenerateUniqCode() + Path.GetExtension(courseDemo.FileName);
        string demoPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/Course/Demoes", course.DemoFileName);

        using (var stream = new FileStream(demoPath, FileMode.Create))
        {
            courseDemo.CopyTo(stream);
        }
    }

    _context.Add(course);
    _context.SaveChanges();

    return course.CourseId;
}

我的创建课程 Razor 页面,用于将课程添加到数据库代码:

@page
@model TopLearn.Web.Pages.Admin.Courses.CreateCourseModel
@{
    ViewData["Title"] = "افزودن دوره جدید";
}

<div class="row">
    <form method="post" enctype="multipart/form-data">
        <div class="col-md-8">
            <h2>اطلاعات دوره</h2>
            <hr />
            <div class="form-group">
                <label>عنوان دوره</label>
                <input type="text" asp-for="Course.CourseTitle" class="form-control">
                <span asp-validation-for="Course.CourseTitle"></span>
            </div>
            <div class="form-group">
                <label>گروه اصلی</label>
                <select class="form-control" asp-for="Course.GroupId" asp-items="@(ViewData["Groups"] as SelectList)"></select>
                <span asp-validation-for="Course.GroupId"></span>
            </div>
            <div class="form-group">
                <label>گروه فرعی</label>
                <select class="form-control" asp-for="Course.SubGroup" asp-items="@(ViewData["SubGroups"] as SelectList)"></select>
                <span asp-validation-for="Course.SubGroup"></span>
            </div>
            <div class="form-group">
                <label>مدرس دوره</label>
                <select class="form-control" asp-for="Course.TeacherId" asp-items="@(ViewData["Teachers"] as SelectList)"></select>
                <span asp-validation-for="Course.TeacherId"></span>
            </div>
            <div class="form-group">
                <label>شرح دوره</label>
                <textarea class="form-control" asp-for="Course.CourseDescription" rows="10"></textarea>
                <span asp-validation-for="Course.CourseDescription"></span>
            </div>
            <div class="form-group">
                <label>قیمت دوره</label>
                <input type="number" asp-for="Course.CoursePrice" value="0" class="form-control" />
                <span asp-validation-for="Course.CourseDescription"></span>
            </div>
            <div class="form-group">
                <label>فایل دمو دوره</label>
                <input type="file" name="demoUp">
                <span asp-validation-for="Course.CourseTitle"></span>
            </div>
            <div class="form-group">
                <label>کلمات کلیدی دوره</label>
                <input type="text" asp-for="Course.Tags" class="form-control">
                <p class="help-block">کلمات را با - جدا کنید</p>
                <span asp-validation-for="Course.CourseTitle"></span>
            </div>
            <input type="submit" value="ذخیره اطلاعات" class="btn btn-success" />
        </div>
        <div class="col-md-4">
            <p></p>
            <img id="imgCourse" class="thumbnail" src="/UserAvatar/Defult.jpg" />
            <div class="form-group">

                <label>انتخاب تصویر</label>
                <input type="file" name="imgCourseUp" id="imgCourseUp">
            </div>
            <div class="form-group">
                <label>سطح دوره</label>
                <select class="form-control" asp-for="Course.LevelId" asp-items="@(ViewData["Levels"] as SelectList)"></select>
                <span asp-validation-for="Course.LevelId"></span>
            </div>
            <div class="form-group">
                <label>وضعیت دوره</label>
                <select class="form-control" asp-for="Course.StatusId" asp-items="@(ViewData["Statues"] as SelectList)"></select>
                <span asp-validation-for="Course.StatusId"></span>
            </div>
        </div>
    </form>
</div>

@section Scripts
    {
    <script>
        $("#Course_GroupId").change(function () {
            $("#Course_SubGroup").empty();
            $.getJSON("/home/GetSubGroups/" + $("#Course_GroupId :selected").val(),
                function (data) {

                    $.each(data,
                        function () {
                            $("#Course_SubGroup").append('<option value=' + this.value + '>' + this.text + '</option>');

                        });

                });


        });

        function readURL(input) {

            if (input.files && input.files[0]) {
                var reader = new FileReader();

                reader.onload = function (e) {
                    $('#imgCourse').attr('src', e.target.result);
                }

                reader.readAsDataURL(input.files[0]);
            }
        }

        $("#imgCourseUp").change(function () {
            readURL(this);
        });
    </script>

    <script src="https://cdn.ckeditor.com/4.9.2/standard/ckeditor.js"></script>
    <script>

        CKEDITOR.replace('Course_CourseDescription', {
            customConfig: '/js/Config.js'
        });

    </script>
}

这是我的观点:

@using TopLearn.Core.Convertors
@model TopLearn.DataLayer.Entities.Course.Course
@{
    ViewData["Title"] = Model.CourseTitle;
}

<div class="container">
    <nav aria-label="breadcrumb">
        <ul class="breadcrumb">
            <li class="breadcrumb-item"><a href="#"> تاپ لرن </a></li>
            <li class="breadcrumb-item active"><a href="#"> دوره ها </a></li>
            <li class="breadcrumb-item active" aria-current="page"> @Model.CourseTitle </li>
        </ul>
    </nav>
</div>

<div class="container">
    <section class="term-content">
        <header><h1> @Model.CourseTitle </h1></header>
        <div class="row">

            <div class="col-md-8 col-sm-12 col-xs-12 pull-left">
                <section class="term-description">
                    <img src="/course/image/@Model.CourseImageName">

                    @Html.Raw(Model.CourseDescription)

                    <h2> سرفصل های این دوره : </h2>
                    <ul>
                        @foreach (var item in Model.CourseEpisodes)
                        {
                            <li> <h3> @item.EpisodeTitle </h3>  
                            @if (item.IsFree)
                            {
                                 <i> رایگان </i>
                            }
                            else
                            {
                                <i> نقدی </i> 
                            }
                            <span>@item.EpisodeTime</span></li>
                
                        }
                    </ul>
                </section>

                <section class="user-comments">
                    <header><h3> نظرات کاربران </h3></header>
                    <div class="inner">
                        <form>
                            <div class="row">
                                <div class="col-md-4 col-sm-12 col-xs-12">
                                    <div class="form-group">
                                        <input type="text" class="form-control" placeholder="نام و نام خانوادگی">
                                    </div>
                                    <div class="form-group">
                                        <input type="text" class="form-control" placeholder="ایمیل">
                                    </div>
                                    <div class="form-group">
                                        <input type="text" class="form-control" placeholder="شماره تماس">
                                    </div>
                                </div>
                                <div class="col-md-8 col-sm-12 col-xs-12">
                                    <div class="form-group">
                                        <textarea class="form-control" placeholder="متن نظر"></textarea>
                                    </div>
                                    <div class="row">
                                        <div class="col-md-8 col-sm-7 col-xs-7">
                                            <div class="form-group">
                                                <input type="text" class="form-control" placeholder="کد امنیتی">
                                            </div>
                                        </div>
                                        <div class="col-md-4 col-sm-5 col-xs-5">
                                            <img src="images/captcha.jpg">
                                        </div>
                                    </div>
                                </div>
                                <div class="col-xs-12">
                                    <button type="submit" class="btn btn-success"> ثبت دیدگاه </button>
                                </div>
                            </div>
                        </form>

                        <div class="comment-list">
                            <!-- row -->
                            <div class="comment-row">
                                <img src="images/pic/avatar.jpg">
                                <div class="left-col">
                                    <h3> میترا رحیمی </h3>
                                    <span>12/03/1397</span>
                                    <p>
                                        لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است
                                    </p>
                                </div>
                            </div>
                            <!-- /row -->
                            <!-- row -->
                            <div class="comment-row">
                                <img src="images/pic/avatar.jpg">
                                <div class="left-col">
                                    <h3> میترا رحیمی </h3>
                                    <span>12/03/1397</span>
                                    <p>
                                        لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است
                                    </p>
                                </div>
                            </div>
                            <!-- /row -->
                            <!-- row -->
                            <div class="comment-row">
                                <img src="images/pic/avatar.jpg">
                                <div class="left-col">
                                    <h3> میترا رحیمی </h3>
                                    <span>12/03/1397</span>
                                    <p>
                                        لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است
                                    </p>
                                </div>
                            </div>
                            <!-- /row -->
                            <!-- row -->
                            <div class="comment-row">
                                <img src="images/pic/avatar.jpg">
                                <div class="left-col">
                                    <h3> میترا رحیمی </h3>
                                    <span>12/03/1397</span>
                                    <p>
                                        لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است
                                    </p>
                                </div>
                            </div>
                            <!-- /row -->
                            <!-- row -->
                            <div class="comment-row">
                                <img src="images/pic/avatar.jpg">
                                <div class="left-col">
                                    <h3> میترا رحیمی </h3>
                                    <span>12/03/1397</span>
                                    <p>
                                        لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و سطرآنچنان که لازم است
                                    </p>
                                </div>
                            </div>
                            <!-- /row -->

                            <nav aria-label="Page navigation">
                                <ul class="pagination justify-content-center">
                                    <li class="page-item">
                                        <a class="page-link" href="#" aria-label="Previous">
                                            <span aria-hidden="true"><i class="zmdi zmdi-chevron-right"></i></span>
                                        </a>
                                    </li>
                                    <li class="page-item"><a class="page-link" href="#">1</a></li>
                                    <li class="page-item"><a class="page-link" href="#">2</a></li>
                                    <li class="page-item"><a class="page-link" href="#">3</a></li>
                                    <li class="page-item">
                                        <a class="page-link" href="#" aria-label="Next">
                                            <span aria-hidden="true"><i class="zmdi zmdi-chevron-left"></i></span>
                                        </a>
                                    </li>
                                </ul>
                            </nav>

                        </div>
                    </div>
                </section>
            </div>

            <aside class="col-md-4 col-sm-12 col-xs-12 pull-right">
                <div class="statistics">
                    <ul>
                        <li>
                            <span> مدت دوره </span>

                            @{
                                TimeSpan time = new TimeSpan(Model.CourseEpisodes.Sum(e => e.EpisodeTime.Ticks));
                            }
                            <i> @time </i>
                        </li>
                        <li>
                            <span> تعداد ویدیوها </span>
                            <i> @Model.CourseEpisodes.Count </i>
                        </li>
                        <li>
                            <span> تعداد دانشجوها </span>
                            <i> 0 نفر </i>
                        </li>
                    </ul>

                   @if (Model.CoursePrice != 0)
                   {
                       <a href=""> شرکت در دوره : @Model.CoursePrice.ToString("#,0") تومان </a>
                   }
                </div>

                <article class="teacher-info">
                    <img src="/UserAvatar/@Model.User.UserAvatar">
                    <h2> مدرس : @Model.User.UserName </h2>
                </article>

                <article class="term-info">
                    <h2> اطلاعات این دوره </h2>
                    <ul>
                       
                        <li>سطح دوره: @Model.CourseStatus.StatusTitle</li>
                        <li>وضعیت دوره: @Model.CourseLevel.LevelTitle</li>
                        @if (Model.CoursePrice != 0)
                        {
                            <li>قیمت : @Model.CoursePrice.ToString("#,0") تومان</li>
                        }
                        else
                        {
                            <li> رایگان </li>
                        }
                        <li>تاریخ ثبت این دوره : @Model.CreateDate.ToShamsi()</li>
                        <li>آخرین بروزرسانی دوره : @Model.UpdateDate?.ToShamsi()</li>
                    </ul>
                </article>

                <div class="share-layer">
                    <span> به اشتراک گذاری </span>
                    <a href=""><i class="zmdi zmdi-facebook"></i></a>
                    <a href=""><i class="zmdi zmdi-google-old"></i></a>
                    <a href=""><i class="zmdi zmdi-twitter"></i></a>
                    <a href=""><i class="zmdi zmdi-linkedin"></i></a>
                </div>

                @if (Model.Tags != null)
                {
                    <div class="tags-layer">
                        @foreach (string tag in Model.Tags.Split('-',StringSplitOptions.RemoveEmptyEntries))
                        {
                        <a href="/Course?filter=@tag"> @tag </a>
                        }
                    </div>
                }

            </aside>
        </div>
    </section>
</div>

这是我的后端代码:

using Microsoft.AspNetCore.Mvc;
using TopLearn.Core.Services.InterFaces;

namespace TopLearn.Web.Controllers
{
    public class CourseController : Controller
    {
        ICourceService _courseServise;

        public CourseController(ICourceService courseServise)
        {
            _courseServise = courseServise;
        }

        public IActionResult Index(int pageId = 1, string filter = ""
            , string getType = "all", string orderByType = "date",
            int startPrice = 0, int endPrice = 0, List<int> selectedGroups = null)
        {
            ViewBag.selectedGroups = selectedGroups;
            ViewBag.Groups = _courseServise.GetAllGroup();
            ViewBag.pageId = pageId;

            return View(_courseServise.GetCourse(pageId, filter, getType, orderByType, startPrice, endPrice, selectedGroups, 9));
        }

        [Route("ShowCourse/{id}")]
        public IActionResult ShowCourse(int id)
        {
            var course = _courseServise.GetCourseForShow(id);

            if (course == null)
            {
                return NotFound();
            }

            return View(course);
        }
    }
}

我只是在追踪,但我不明白问题

asp.net-core-mvc nullreferenceexception
1个回答
0
投票

根据您的代码,我发现您在 post 方法时只显示雕像标题和级别标题,而不将它们添加到请求正文中。

通常,为此,我们可以将其放入隐藏输入中,asp.net core 会在发布过程中将输入隐藏值添加到后端。

更多详情,您可以参考下面的例子:

由于我没有你的模型,所以我创建了一个简单的模型。

public class Course
{
    public CourseLevel CourseLevel { get; set; }
}

public class CourseLevel
{
    public string StatusTitle { get; set; }

    public string LevelTitle { get; set; }
}

控制器:

    public IActionResult Index()
    {


        var test = new Course() {  CourseLevel = new CourseLevel { LevelTitle="1", StatusTitle="1" } };

        return View(test);
    }

查看:

<form asp-action="AddCourse" asp-controller="Home">

    <ul>
        <li>سطح دوره: @Model.CourseLevel.StatusTitle</li>
        <li>وضعیت دوره: @Model.CourseLevel.LevelTitle</li>
    </ul>
    <input type="hidden"  asp-for="CourseLevel.StatusTitle"/>
    <input type="hidden" asp-for="CourseLevel.LevelTitle" />
    <input type="submit" value="test" />
</form>

结果:

© www.soinside.com 2019 - 2024. All rights reserved.