ASP .Net MVC 应用程序:当 db-entity(“课程”)的布尔属性(“已观看”)为真时如何向用户显示
Posted
技术标签:
【中文标题】ASP .Net MVC 应用程序:当 db-entity(“课程”)的布尔属性(“已观看”)为真时如何向用户显示【英文标题】:ASP .Net MVC-application: how to display to the user when a boolean property ("watched") of a db-entity ("lesson) is true 【发布时间】:2021-09-24 07:05:57 【问题描述】:我想在网络屏幕上显示,当我点击每节课时,它可以添加到数据库中的 UserAndLesson 表中(我检查了重复的案例)。它还向 html 页面显示我已经学到了这一课,但我找不到其他条件或者我做错了。
cshtml代码:
<ul>
@model List<Project.Models.Lession>
@foreach (var item in Model)
//if else condition
if ()
<li>
<div class="card-lesson lesson-done">
<a style="color:black" href="/learning/@item.CourseID/@item.LessionID">
<h4><span><img src="https://img.icons8.com/color/20/000000/checked-2--v1.png" /></span>@item.Name</h4>
<p class="card-time">4:35</p>
</a>
</div>
<hr>
</li>
else
<li>
<div class="card-lesson">
<a style="color:black" href="/learning/@item.CourseID/@item.LessionID">
<h4>@item.Name</h4>
<p class="card-time">10:43</p>
</a>
</div>
<hr>
</li>
</ul>
控制器(我让viewbag填充html页面的另一部分)
[CheckSession]
public ActionResult Index(int courseId, int lessonId)
int userId = Convert.ToInt32(Session["user_id"].ToString());
var checkUserLearnLesson = from e in db.UserAndLessions
where e.UserID == userId && e.LessionID == lessonId
select e;
//case if user have not learn this lesson before
if(checkUserLearnLesson.ToList().Count == 0)
//user learn this lesson
UserAndLession newUserAndLesson = new UserAndLession()
UserID = userId,
LessionID = lessonId,
Watched = true
;
db.UserAndLessions.Add(newUserAndLesson);
db.SaveChanges();
//select all lesson in course
var learningInfo = from l in db.Lessions
where l.CourseID == courseId
select l;
//get data in table lesson
var lessonInfor = from l in learningInfo where l.LessionID == lessonId select l;
//case when lesson not existed
if (lessonInfor.ToList().Count == 0)
return RedirectToAction("Index", "Error");
//case when have at least 1 lesson
ViewBag.srcVideo = lessonInfor.ToList()[0].Video;
ViewBag.description = lessonInfor.ToList()[0].Description;
ViewBag.title = lessonInfor.ToList()[0].Name;
var courseName = from c in db.Courses where c.CourseID == courseId select c;
ViewBag.courseName = courseName.ToList()[0].Name;
return View(learningInfo.ToList());
数据库:
【问题讨论】:
【参考方案1】:很抱歉,这段代码对我来说毫无意义。当用户订阅一门课程时,你应该为这门课程的每一节课做一个记录,并且watched = false。应该在任何逻辑之后在课程控制器上将该值设为真。
您的操作方法接受一个 CourseId 和一个课程 ID,这意味着您只需要关于一门课程的信息...,或者其中一门实际上是多余的。
对于您的 Index-ActionMethod
您的模型属于 UserAndLession 类型
然后你把它填满
int userId = Convert.ToInt32(Session["user_id"].ToString());
model = from e in db.UserAndLessions
where e.UserID == userId && e.LessionID == lessonId
select e;
视图中不需要 if。你基本上有两列,课程ID,完成? who与model.LessionId和model.Watched匹配,除非你需要它作为一个图标,你可以使用一个简单的if(model.watched) => show icon。
如果您想显示课程中的所有课程。您在 UserAndLessions 表中添加带有课程的导航器属性。正如您所做的那样,对特定的 UserId 和 CourseId 执行查询。你的模型变成了List<UserAndLessions>
,你用@foreach(模型中的变量项)填满了你的表
如果有一些具体的课程逻辑,请分享。
【讨论】:
写泛型时要小心 (List<UserAndLessions>
) - 如果你不反引号它们,子类型会被 Markdown 解析器解释为无效的 HTML,它会消失。以上是关于ASP .Net MVC 应用程序:当 db-entity(“课程”)的布尔属性(“已观看”)为真时如何向用户显示的主要内容,如果未能解决你的问题,请参考以下文章
当服务器位于 AWS ELB 之后时,ASP.NET Core MVC 应用程序如何获取客户端 IP 地址?