如何在 Razor 页面 Create.cshtml 上显示单独表中的值

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

我有一个创建页面来为我的主管模型创建数据。它看起来像这样: Create Supervisor Snip

Supervisor 类在这里:

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace Votes.Model
{
    public class Supervisor
    {
        [Key]
        public int SupervisorId { get; set; }

        [Display(Name = "Supervisor Last Name")]
        public string? SupLastName { get; set; }

        [Display(Name = "Supervisor First Name")]
        public string? SupFirstName { get; set; }

        [Display(Name = "Ward")]
        public int? Ward { get; set; }

        [Display(Name = "District")]
        public int? District { get; set; }

        public ICollection<Committee>? Committees { get; set; }

        [Display(Name = "Chair/Member Committee 1")]
        public string? MemberComm1 { get; set; }

        [Display(Name = " Chair/Member Committee 2")]
        public string? MemberComm2 { get; set; }
    }
}

public enum MemberComm1
{
    C,
    M,
    X
}

public enum MemberComm2
{
    C,
    M,
    X
}

我希望获得该委员会的实际名称(存储在 CommitmentDesc 字段中),而不是每个 MemberComm1(主席/成员委员会 1)、MemberComm2(主席/成员委员会 2)等的标签。

这是委员会模型:

using System.ComponentModel.DataAnnotations;

namespace Votes.Model
{
    public class Committee
    {
        [Key]
        public int CommitteeId { get; set; }

        [Required]
        [Display(Name = "Committee No")]
        public int CommitteeNo { get; set; }
       
        [Required]
        [Display(Name = "Committee Description")]
        public string? CommitteeDesc { get; set; }
        
        [Required]
        [Display(Name = "Committee Type")]
        public string? CommitteeType { get; set; }

        public ICollection<Supervisor> Supervisors { get; set; }
    }
}

由于每个委员会都有一个固定的CommitteeNo(1、2等),我想使用某种类型的if语句来表示如果Committee.CommitteeNo == 1,则CommitteeDesc。我只想使用它作为标签(即,1 = 财务委员会,2 = 政府运营等。它不会提交到任何数据库表。

我尝试了各种列表、IEnumerables,但我就是无法弄清楚 cshtml 页面上的语法。

这是现在的“创建”页面的 .cs。

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.EntityFrameworkCore;
using Votes.Data;
using Votes.Model;
using System.Linq;

namespace Votes.Pages.Supervisors;

[BindProperties]

public class CreateModel : PageModel
{
    private readonly ApplicationDbContext _db;
    public Supervisor Supervisor { get; set; }
    public Committee Committee { get; set; }

    public IList<Committee> CommitteeList { get; set; }

    public CreateModel(ApplicationDbContext db)
    {
        _db = db;
    }

    public IEnumerable<Committee> DisplayCommitteeData { get; set; } 
    public IEnumerable<Municipality> DisplayMunicipalityData { get; set; }
    public IEnumerable<Ward> DisplayWardData { get; set; }
    public IEnumerable<District> DisplayDistrictData { get; set; }

    public async Task OnGet()
    {
        await _db.Committee.Select(a => a.CommitteeId).ToListAsync();
        DisplayCommitteeData = await _db.Committee.ToListAsync();
        await _db.Municipality.Select(a => a.MunicipalityId).ToListAsync();
        DisplayMunicipalityData = await _db.Municipality.ToListAsync();
        await _db.Ward.Select(a => a.WardId).ToListAsync();
        DisplayWardData = await _db.Ward.ToListAsync();
        await _db.District.Select(a => a.DistrictId).ToListAsync();
        DisplayDistrictData = await _db.District.ToListAsync();
    }

    public async Task<IActionResult> OnPost()
    {
        if (ModelState.IsValid)
        {
            _db.Supervisor.Add(Supervisor);
            await _db.Supervisor.AddAsync(Supervisor);
            await _db.SaveChangesAsync();
            TempData["success"] = "Supervisor added successfully.";
            return RedirectToPage("Index");
        }
        return Page();
    }
}

如您所见,我有一些我可能不需要的额外东西。所有这一切都是我努力让它发挥作用。谁能描述一下我应该走的方向?我经常遇到的错误是对象不能为空。委员会表中有完整的委员会数据。

我在 .cshtml 页面上尝试的一件事是:

@{
    var result = (from x in @Model.DisplayCommitteeData where x.CommitteeNo == 1 select x);
    {
        return result.ToString();
    }
}

但是我一直在“返回”这个词上收到错误,我不确定那里可能会出现什么错误。

预先感谢您提供的任何及所有帮助。

html asp.net syntax model razor-pages
1个回答
0
投票

好吧,在尝试了许多不同的方法来获得一个简单的答案之后(但对我来说仍然不简单!),我突然发现标签就像字段本身一样确实需要一个@foreach。然后我就可以使用我已有的 IEnumerable 并在每个委员会字段上方的视图页面上使用以下内容:

                        @foreach (var item1 in Model.DisplayCommitteeData)
                        if (item1.CommitteeNo == 1)
                        {
                            @item1.CommitteeDesc;
                        }

我只是将每个委员会字段的 'item1.CommitteeNo == 1) 更改为 'item2.CommitteeNo ==2' 等。然后我删除了标签 asp-for 代码行,因为不再需要它们。

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