提问人:milad 提问时间:10/17/2023 最后编辑:milad 更新时间:10/18/2023 访问量:58
引用为空,但数据库有数据
Null reference but database has data
问:
我在显示关卡和雕像时遇到了问题,当然在课程中查看在此处输入图像描述。
这是我的问题,数据库确实有数据,但在添加课程服务中,它在方法中返回 null。post
这是我的方法: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;
}
我的创建课程剃须刀页面,用于将课程添加到数据库代码:
@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>
}
创建课程 Razor 页面后端代码:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Mvc.Rendering;
using TopLearn.Core.Services.InterFaces;
using TopLearn.DataLayer.Entities.Course;
namespace TopLearn.Web.Pages.Admin.Courses
{
public class CreateCourseModel : PageModel
{
private ICourceService _courseService;
public CreateCourseModel(ICourceService courseService)
{
_courseService = courseService;
}
[BindProperty]
public Course Course { get; set; }
public void OnGet()
{
var groups = _courseService.GetGroupForManageCourse();
ViewData["Groups"] = new SelectList(groups, "Value", "Text");
var subGrous = _courseService.GetSubGroupForManageCourse(int.Parse(groups.First().Value));
ViewData["SubGroups"] = new SelectList(subGrous, "Value", "Text");
var teachers = _courseService.GetTeachers();
ViewData["Teachers"] = new SelectList(teachers, "Value", "Text");
var levels = _courseService.GetLevels();
ViewData["Levels"] = new SelectList(levels, "Value", "Text");
var statues = _courseService.GetStatus();
ViewData["Statues"] = new SelectList(statues, "Value", "Text");
}
public IActionResult OnPost(IFormFile imgCourseUp, IFormFile demoUp)
{
if (!ModelState.IsValid)
return Page();
_courseService.AddCourse(Course, imgCourseUp, demoUp);
return RedirectToPage("Index");
}
}
}
这是我的观点:
@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);
}
}
}
我只是在追踪,但我不明白问题
答:
0赞
Brando Zhang
10/18/2023
#1
根据您的代码,我发现您在发布方法时只显示雕像标题和级别标题,而不是将它们添加到请求正文中。
通常,为此,我们可以将其放在输入隐藏中,asp.net 核心将在发布期间将输入隐藏值添加到后端。
更多细节,您可以参考以下示例:
由于我没有您的模型,因此我创建了一个简单的模型。
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>
结果:
评论
0赞
milad
10/18/2023
我的观点是显示课程而不是将课程添加到数据库的代码
0赞
milad
10/18/2023
对于添加课程,我使用的是剃须刀页面,但此视图代码用于显示带有级别标题和雕像标题的课程
0赞
Brando Zhang
10/18/2023
你只需要了解它是如何工作的并修改你的代码,你可以先检查请求正文,看看它是否包含标题。如果它不包含它,您应该添加隐藏输入,否则让表单发布它。
0赞
milad
10/18/2023
我在数据库中添加了一门新课程,但我仍然有这个问题,但今天我将检查代码
1赞
milad
10/18/2023
感谢您的帮助 我的问题已解决 课程模型 课程模型之间关系需要外键 状态和级别模型
评论