Получение этой ошибки в моем приложении на странице бритвы:
Код серьезности Описание Состояние подавления строки файла проекта Ошибка (активная). Оператор foreach CS1579 не может работать с переменными типа «WorkingVote», поскольку «WorkingVote» не содержит общедоступного экземпляра или определения расширения для «GetEnumerator». VoteTracker S:\VisualStudioProjects\VoteTracker\Pages\WorkingVotes\Edit.cshtml
Строка, в которой это происходит, находится в теле моей таблицы в Edit.cshtml.
<tbody>
@foreach (var obj in Model.WorkingVote)
{...
Model.WorkingVote подчеркнут.
Я нашел эту ошибку, а также прочитал все сообщения об этой ошибке здесь, но не знаю, как напрямую применить ее к моему приложению. Я знаю, что он ищет «Get Enumerator» и ему нужна какая-то коллекция? Я пробовал изменить «публичное рабочее голосование?» Работая, проголосуйте за 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();
}
}
Я некоторое время занимался этим, тестируя разные вещи, но мне наверняка пригодилась бы помощь. Спасибо!!
В вашем коде WorkVote представляет собой отдельный объект, а не коллекцию. Если вы хотите перебирать коллекцию WorkVote на странице, вам необходимо определить коллекцию IEnumerable<WorkingVote>
в вашей EditModel. Вот пример для вашей справки:
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>
Когда я запрашиваю идентификатор 1:
Вы используете
foreach
для перебора коллекции.WorkingVote
это не коллекция. Это единичный случай. Нет смысла использоватьforeach
в вашем сценарии.