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();
}
}
但是我一直在“返回”这个词上收到错误,我不确定那里可能会出现什么错误。
预先感谢您提供的任何及所有帮助。
好吧,在尝试了许多不同的方法来获得一个简单的答案之后(但对我来说仍然不简单!),我突然发现标签就像字段本身一样确实需要一个@foreach。然后我就可以使用我已有的 IEnumerable 并在每个委员会字段上方的视图页面上使用以下内容:
@foreach (var item1 in Model.DisplayCommitteeData)
if (item1.CommitteeNo == 1)
{
@item1.CommitteeDesc;
}
我只是将每个委员会字段的 'item1.CommitteeNo == 1) 更改为 'item2.CommitteeNo ==2' 等。然后我删除了标签 asp-for 代码行,因为不再需要它们。