Отказ от ответственности: я не программист Javascript или asp.net. Я пытаюсь, но я еще не там. Если я задаю вопрос, то это потому, что, несмотря на то, что я прочитал много материала (и всегда перечитываю все, что было предложено) и задал вопросы, я все еще не понимаю или не пытаюсь заставить это работать самостоятельно после просмотр указанного материала не дал результатов. Я не задаю вопросы, потому что мне лень.
У меня есть приложение, которое должно записывать голоса в реальном времени. То есть кто-то нажимает кнопку-переключатель «Да», «Нет» или «Воздержаться», и голос записывается в столбцах «Да», «Нет» или «Воздержался». Существует 2 типа голосов: простое большинство и большинство в 2/3. Они определяются DDL. Если выбран вариант DDL, например, «Простое большинство» и есть голос «За», количество голосов за простое большинство должно быть записано в столбце «Да». Это должно произойти для каждого супервизора на странице. Вот мой последний скриншот:

В настоящее время, когда я нажимаю любой переключатель в любой строке, в столбцах «Да», «Нет» или «Воздержался» не возвращается количество голосов. Кроме того, если щелкнуть переключатель для первого супервизора, а затем нажать переключатель для следующего супервизора, первый проверенный мной переключатель станет непроверенным. Каким-то образом мой код сообщает странице, что ВСЕ переключатели находятся в одной группе - даже если это должны быть отдельные группы - по одной для каждого руководителя.
Область заголовка голосования взята из окна голосования. таблица, которая при объединении с таблицей Supervisor становится таблицей WorkVote. Возможно, это запутанный способ сделать это, но я не был уверен, как еще я мог бы присоединиться к ним. Заголовок голосования (6 полей вверху страницы) создается отдельно, без остальной части страницы, и сохраняется в таблице голосования.
Итак, при нажатии Enter На странице голосов единственное, что должен сделать пользователь, — это щелкнуть каждую из групп переключателей, пока руководители голосуют для записи голосов. Затем пользователь нажимал кнопку «Обновить», и ВСЕ на этой странице было опубликовано в таблице «WorkingVote». Надеюсь, это имеет смысл.
Вот файл .cshtml (с моей попыткой написания Javascript):
Код: Выделить всё
Enter Votes
---Select Supervisor Status---
---Select Vote Type---
---Select Committee---
MUNICIPALITY
SUPERVISOR
SIMPLE
2/3
ACTIVE VOTE
YES
NO
ABSTAIN
@foreach (var obj in Model.WorkingVote.OrderBy(i => i.Municipality))
{
@Html.TextBoxFor(modelItem => obj.Municipality, new
{ disabled = "disabled", @readonly = "readonly", @class = "form-control", @style = "width: 125px", id ="Municipality" })
@Html.TextBoxFor(modelItem => obj.SupervisorName, new
{ disabled = "disabled", @readonly = "readonly", @class = "form-control", @style = "width: 175px" })
@Html.TextBoxFor(modelItem => obj.SimpleMajority, new
{ disabled = "disabled", @readonly = "readonly", id = "SimpleMajority", @class = "form-control", @dir = "rtl", @style = "width: 75px" })
@Html.TextBoxFor(modelItem => obj.TwoThirdsMajority, new
{ disabled = "disabled", @readonly = "readonly", id = "TwoThirdsMajority", @class = "form-control", @dir = "rtl", @style = "width: 50px" })
@foreach (var item4 in Html.GetEnumSelectList())
{
@item4.Text
}
@Html.TextBoxFor(modelItem => obj.YesVote, new { disabled = "disabled", @readonly = "readonly", id="YesVote", @class = "form-control", @dir = "rtl", @style = "width: 100px" })
@Html.TextBoxFor(modelItem => obj.NoVote, new { disabled = "disabled", @readonly = "readonly", id="NoVote", @class = "form-control", @dir = "rtl", @style = "width: 100px" })
@Html.TextBoxFor(modelItem => obj.AbsVote, new { disabled = "disabled", @readonly = "readonly", id="AbsVote", @class = "form-control", @dir = "rtl", @style = "width: 100px" })
}
Update
Back to List
@{
var prevDisabled = !Model.WorkingVote.HasPreviousPage ? "disabled" : "";
var nextDisabled = !Model.WorkingVote.HasNextPage ? "disabled" : "";
}
Previous
Next
@section Scripts
{
const votes = [$("#Municipality")];
var votetype = document.getElementById('VoteType');
var sm = document.getElementById('SimpleMajority');
var ttm = document.getElementById('TwoThirdsMajority');
var radio = document.getElementById('ActiveVote');
var yes = document.getElementById('YesVote');
var no = document.getElementById('NoVote');
var abs = document.getElementById('AbsVote');
votes.forEach(radio.addEventListener("click", function updateVoteData() {
if (radio.value === 'Yes' && $("#VoteType").value === 'Simple Majority') {
radio.value = "Yes";
this.checked = true;
input.removeAttribute('disabled')
input.value = radio.value;
yes = $("#SimpleMajority").val();
$("#YesVote").val(yes);
}
elseif(radio.value === 'No' && $("#VoteType").value === 'Simple Majority') {
radio.value = "No";
this.checked = true;
input.removeAttribute('disabled')
input.value = radio.value;
no = $("#SimpleMajority").val();
$("#NoVote").val(no);
}
elseif(radio.value === 'Abstain' && $("#VoteType").value === 'Simple Majority') {
radio.value = "Abstain";
this.checked = true;
input.removeAttribute('disabled')
input.value = radio.value;
abs = $("#SimpleMajority").val();
$("#AbsVote").val(abs);
}
elseif(radio.value === 'Yes' && $("#VoteType").value === '2/3 Majority') {
radio.value = "Yes";
this.checked = true;
input.removeAttribute('disabled')
input.value = radio.value;
yes = $("#TwoThirdsMajority").val();
$("#YesVote").val(yes);
}
elseif(radio.value === 'No' && $("#VoteType").value === '2/3 Majority') {
radio.value = "No";
this.checked = true;
input.removeAttribute('disabled')
input.value = radio.value;
no = $("#TwoThirdsMajority").val();
$("#NoVote").val(no);
}
elseif(radio.value === 'Abstain' && $("#VoteType").value === '2/3 Majority') {
radio.value = "Abstain";
this.checked = true;
input.removeAttribute('disabled')
input.value = radio.value;
abs = $("#TwoThirdsMajority").val();
$("#AbsVote").val(abs);
}
else
{
''
}
}));
}
Код: Выделить всё
[BindProperties]
public class EditModel : PageModel
{
private readonly ApplicationDbContext _db;
public Vote Vote { get; set; }
public ActiveVote ActiveVote { get; set; }
public Supervisor Supervisor { get; set; }
public EditModel(ApplicationDbContext db)
{
_db = db;
}
public PaginatedList? WorkingVote { get; set; } = default!;
public IEnumerable DisplayCommitteeData { get; set; }
public IEnumerable DisplayVoteTypeData { get; set; }
public IEnumerable DisplaySupervisorData { get; set; }
public IEnumerable DisplayStatusData { get; set; }
public async Task OnGetAsync(int Id, int? pageIndex)
{
Vote = _db.Vote.Find(Id);
DisplayCommitteeData = await _db.Committee.ToListAsync();
DisplayVoteTypeData = await _db.VoteType.ToListAsync();
DisplaySupervisorData = await _db.Supervisor.ToListAsync();
DisplayStatusData = await _db.Status.ToListAsync();
IQueryable workingVote = (IQueryable)(from x in _db.Supervisor
join y in _db.Vote on x.Status equals y.SupervisorStatus
select new WorkingVote
{
VoteId = y.VoteId,
VoteCode = y.VoteCode,
VoteDate = y.VoteDate,
VoteDesc = y.VoteDesc,
VoteType = y.VoteType,
Committee = y.Committee,
Municipality = x.Municipality,
SupervisorName = x.DisplayName,
SimpleMajority = x.Simple,
TwoThirdsMajority = x.TwoThirds,
ActiveVote = y.ActiveVote,
YesVote = y.YesVote,
NoVote = y.NoVote,
AbsVote = y.AbsVote,
}); ;
int casesPerPage = 20;
WorkingVote = await PaginatedList.CreateAsync(
workingVote, pageIndex ?? 1, casesPerPage);
}
public async Task OnPost()
{
if (ModelState.IsValid)
{
_db.Vote.Update(Vote);
await _db.SaveChangesAsync();
TempData["success"] = "Votes cast successfully.";
return RedirectToPage("Index");
}
return Page();
}
}
- Могу ли я использовать для этого Javascript? Я получил противоречивые ответы.
- Если да, то что не так с моим Javascript?
- Если нет, то как мне заставить это работать на моем . cs?
Подробнее здесь: https://stackoverflow.com/questions/786 ... ript-or-cs