当前位置: 首页 > 知识库问答 >
问题:

无法显示todo任务类别的任何属性

容柏
2023-03-14

我有一个简单的asp.net核心项目,在项目中,任务页面应该显示任务的详细信息——包括任务的类别——但是发生的是任务的类别和用户的用户名没有显示在索引页面上。这是我在github上的存储库链接:https://github.com/mohamedvoli/ToDo/tree/main/TodoList这是我的索引视图:


@model IEnumerable<TodoList.Models.TodoTask>

@{
    ViewData["Title"] = "Index";
}

<h1>Index</h1>

<p>
    <a asp-action="Create">Add A New Task</a>
</p>
<table class="table">
    <thead>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.Title)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Description)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.TimeStamp)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.ParentCategory.Title)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.User.UserName)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.IsDone)
            </th>
            <th></th>
        </tr>
    </thead>
    <tbody>
@foreach (var item in Model) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Title)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Description)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.TimeStamp)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.ParentCategory.Title)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.User.UserName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.IsDone)
            </td>
            <td>
                <a asp-action="Edit" asp-route-id="@item.TodoTaskId">Edit</a> |
                <a asp-action="Details" asp-route-id="@item.TodoTaskId">Details</a> |
                <a asp-action="Delete" asp-route-id="@item.TodoTaskId">Delete</a>
            </td>
        </tr>
}
    </tbody>
</table>

这是我的控制器:

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using TodoList.Models;
using TodoList.Models.Repos;
using TodoList.Models.ViewModels;

namespace TodoList.Controllers
{
    public class TodoTasksController : Controller
    {
        private ITodoRepo<TodoTask> _TaskRepo;
        private ITodoRepo<Category> _CategoryRepo;
        private UserManager<ApplicationUser> _UserManager;
        public TodoTasksController(ITodoRepo<TodoTask> TaskRepo,
            UserManager<ApplicationUser> UserManager,
            ITodoRepo<Category> CategoryRepo)
        {
            _TaskRepo = TaskRepo;
            _UserManager = UserManager;
            _CategoryRepo = CategoryRepo;
        }

        // GET: TodoTasksController
        [Authorize]
        public ActionResult Index(string SearchingTerm)
        {
            var UserId = _UserManager.GetUserId(User);
            List<TodoTask> AllTasks = _TaskRepo.List(UserId);
            if (!string.IsNullOrEmpty(SearchingTerm))
            {
                AllTasks = _TaskRepo.Search(SearchingTerm, UserId);
            }
            return View(AllTasks);
        }

        // GET: TodoTasksController/Details/5
        [Authorize]
        public ActionResult Details(int id)
        {
            return View();
        }

        // GET: TodoTasksController/Create
        [Authorize]
        public ActionResult Create()
        {
            return View(SetTheModelToGetMethod());
        }

        // POST: TodoTasksController/Create
        [Authorize]
        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<ActionResult> CreateAsync(TaskCategoryVm model)
        {

            var UserId = _UserManager.GetUserId(User);
            if (ModelState.IsValid)
            {
                try
                {
                    if (model.CategoryId == -1)
                    {
                        ViewData["Message"] = "Please select a category!"; 
                        return View(SetTheModelToGetMethod());
                    }
                    else
                    {
                        var category = _CategoryRepo.Find(model.CategoryId);
                        var User = await _UserManager.FindByIdAsync(UserId);
                        TodoTask ValidModel = new TodoTask
                        {
                            Title = model.Title,
                            Description = model.Description,
                            TimeStamp = DateTime.Now,
                            IsDone = model.IsDone,
                            ParentCategory = category,
                            User = User
                        };
                        _TaskRepo.Add(ValidModel);
                        return RedirectToAction(nameof(Index));
                    }
                }
                catch
                {
                    return View();
                }
            }
            else
            {
                ModelState.AddModelError("", "You have to fill all the required fields!");
                return View(FillInSelectList(UserId));
            }
        }

        // GET: TodoTasksController/Edit/5
        [Authorize]
        public ActionResult Edit(int id)
        {
            return View();
        }

        // POST: TodoTasksController/Edit/5
        [Authorize]
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit(int id, IFormCollection collection)
        {
            try
            {
                return RedirectToAction(nameof(Index));
            }
            catch
            {
                return View();
            }
        }

        // GET: TodoTasksController/Delete/5
        [Authorize]
        public ActionResult Delete(int id)
        {
            return View();
        }

        // POST: TodoTasksController/Delete/5
        [Authorize]
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Delete(int id, IFormCollection collection)
        {
            try
            {
                return RedirectToAction(nameof(Index));
            }
            catch
            {
                return View();
            }
        }
        [Authorize]
        public List<Category> FillInSelectList(string UserId)
        {
            var AllCategories = _CategoryRepo.List(UserId).ToList();
            AllCategories.Insert(0, new Category { CategoryId = -1, Title = "--- Please select a category ---" });
            return AllCategories;
        }
        public TaskCategoryVm SetTheModelToGetMethod()
        {
            var UserId = _UserManager.GetUserId(User);
            var AllCategories = FillInSelectList(UserId);
            TaskCategoryVm model = new TaskCategoryVm
            {
                UserId = UserId,
                Categories = AllCategories
            };
            return model;
        }
    }
}

这是我的模型:

using Microsoft.AspNetCore.Mvc.ModelBinding;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;

namespace TodoList.Models
{
    public class TodoTask
    {
        public int TodoTaskId { get; set; }
        [Required]
        public string Title { get; set; }
        [Required]
        public string Description { get; set; }
        [BindNever]
        public DateTime TimeStamp { get; set; }
        public bool IsDone { get; set; }
        [Required]
        public int CategoryId { get; set; }
        public Category ParentCategory { get; set; }
        public string UserId { get; set; }
        public ApplicationUser User { get; set; }

    }
}

有人能帮忙吗?提前感谢。

共有1个答案

梁丘书
2023-03-14

使用。Include()access与您的表相关的表的数据转到TaskRepo。cs在第41行,用我的代码替换你的函数

public List<TodoTask> List(string id)
    {
        var AllTasks = _db.Tasks.Where(x => x.UserId == id).Include(x=>x.ParentCategory).Include(x=>x.User).ToList();

        return AllTasks;
    }

请修复尚未使用的其他查询。有关使用的更多帮助,请在其他函数中包含()。Include()访问此链接单击此处

 类似资料:
  • 我正在编写一个简单的节点。js项目使用最新版本的eclipse IDE for JavaScript和Web开发者版本:2019-09 R(4.13.0)构建id:20190917-1200 OS:Mac OS X,v.10.15.1,x86_64/cocoa Java版本:12.0.2使用最新版本的node。js(Node.jsv12.13.0)我知道TODO任务没有出现在任务视图窗口中:示例代

  • 主要内容:实例,实例,实例关键词:$display, $write, $strobe, $monitor Verilog 中主要用以下 4 种系统任务来显示(打印)调试信息:$display, $write, $strobe, $monitor。 $display $display 使用方法和 C 语言中的 printf 函数非常类似,可以直接打印字符串,也可以在字符串中指定变量的格式对相关变量进行打印。例如: 如果没有指

  • 我有个组件叫我的组件 模型贝宝。php 控制器paypal.php 意见 贝宝视图。html。php索引。html TMPL(文件夹)default.phpindex.html 在控制器中,我有这个代码 在模型中我有一段代码 在视图/模板/default.php我有这个 当我运行这个url

  • 问题内容: 我正在尝试在Windows中显示。如何在Windows任务栏上显示(如)? 问题答案: 对话框本身不能具有任务栏条目,但是您可以构造一个没有任何可见效果的框架,并将其用作对话框的父级。然后,该对话框看起来像具有任务栏条目。以下代码显示了如何执行此操作:

  • 我如何在Android Studio中打开一个视图,其中显示我使用注释创建的所有任务?

  • 我正在创建一个Android应用程序,它使用BLE与MCU进行通信,目前我可以使用我的应用程序与MCU建立连接,但当我试图发现并获取设备的服务时,我返回了一个空数组,并且不确定原因。 输出: 09-26 16:33:09.648 10917-10931/bamboomobile.medheadI/TAG:连接到GATT服务器。 09-26 16:33:09.648 10917-10931/bamb