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&lt;UserAndLessions&gt;,你用@foreach(模型中的变量项)填满了你的表

如果有一些具体的课程逻辑,请分享。

【讨论】:

写泛型时要小心 (List&lt;UserAndLessions&gt;) - 如果你不反引号它们,子类型会被 Markdown 解析器解释为无效的 HTML,它会消失。

以上是关于ASP .Net MVC 应用程序:当 db-entity(“课程”)的布尔属性(“已观看”)为真时如何向用户显示的主要内容,如果未能解决你的问题,请参考以下文章

Asp.net MVC 之请求生命周期

当服务器位于 AWS ELB 之后时,ASP.NET Core MVC 应用程序如何获取客户端 IP 地址?

asp.net 如何变成 MVC 或 WebApi?

ASP .Net MVC 应用程序:当 db-entity(“课程”)的布尔属性(“已观看”)为真时如何向用户显示

ASP.NET MVC 4 异步子动作

asp.net mvc 2 - 当 RedirectToAction 使用 JSON 数据时失去授权