理解错误CS1579 foreach语句无法对类型的变量进行操作

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

在我的剃刀页面应用程序中出现此错误:

严重性代码描述项目文件行抑制状态 错误(活动)CS1579 foreach 语句无法对“WorkingVote”类型的变量进行操作,因为“WorkingVote”不包含“GetEnumerator”VoteTracker S:\VisualStudioProjects\VoteTracker\Pages\WorkingVotes\Edit.cshtml 的公共实例或扩展定义

它发生的行位于我的 Edit.cshtml 上的表格主体中。

<tbody>
    @foreach (var obj in Model.WorkingVote)
    {...

Model.WorkingVote 有下划线。

我查找了此错误,还阅读了此处有关该错误的所有帖子,但不知道如何将其直接应用到我的应用程序。我知道它正在寻找“获取枚举器”,并且需要某种类型的集合?我尝试过更改“公共工作投票”?向 IEnumerable 或 List 进行工作投票,但这会给我带来更多错误。

这是我的.cs:

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.EntityFrameworkCore;

namespace VoteTracker.Pages.WorkingVotes;

[BindProperties]

public class EditModel : PageModel
{
    private readonly ApplicationDbContext _db;
    public EditModel(ApplicationDbContext db)
    {
        _db = db;
    }

    public WorkingVote? WorkingVote { get; set; } 

    public IEnumerable<Committee> DisplayCommitteeData { get; set; }
    public IEnumerable<VoteType> DisplayVoteTypeData { get; set; }
    public IEnumerable<Supervisor> DisplaySupervisorData { get; set; }
    public IEnumerable<Status> DisplayStatusData { get; set; }

    public async Task OnGetAsync(int Id)
    {
        WorkingVote = _db.WorkingVote.Find(Id);
        DisplayCommitteeData = await _db.Committee.ToListAsync();
        DisplayVoteTypeData = await _db.VoteType.ToListAsync();
        DisplaySupervisorData = await _db.Supervisor.ToListAsync();
        DisplayStatusData = await _db.Status.ToListAsync();
    }

    public async Task<IActionResult> OnPost()
    {
        if (ModelState.IsValid)
        {
            _db.WorkingVote.Update(WorkingVote);
            await _db.SaveChangesAsync();
            TempData["success"] = "Vote cast successfully.";
            return RedirectToPage("Index");
        }
        return Page();
    }
}

我已经对此进行了一段时间的测试,测试了不同的东西,但肯定需要一些帮助。谢谢!!

variables foreach syntax razor-pages
1个回答
0
投票

在您的代码中,WorkingVote 是单个对象而不是集合。如果你想在页面中迭代一个WorkingVote集合,你需要在你的EditModel中定义一个

IEnumerable<WorkingVote>
的集合。这是一个例子供您参考:

public class EditModel : PageModel
{
    private readonly ApplicationDbContext _db;
    public EditModel(ApplicationDbContext db)
    {
        _db = db;
    }

    public IEnumerable<WorkingVote> WorkingVotes { get; set; }



    public async Task OnGetAsync(int Id)
    {
        WorkingVotes = await _db.WorkingVotes.Where(v => v.Id == Id).ToListAsync();

    }

    public async Task<IActionResult> OnPost()
    {
        if (ModelState.IsValid)
        {
            _db.WorkingVotes.UpdateRange(WorkingVotes);
            await _db.SaveChangesAsync();
            TempData["success"] = "Vote cast successfully.";
            return RedirectToPage("Index");
        }
        return Page();
    }
}

视图:

 @page "{id:int}"
    @model EditModel
    
    <tbody>
        @foreach (var obj in Model.WorkingVotes)
        {
            <tr> @obj.Name </tr>
        }
    </tbody>

当我查询id 1时:

enter image description here enter image description here

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