Вы должны связать событие ': флажок' флажка в javascript с ajax вызовом действия вашего контроллера. Если вызов ajax выполнен успешно, вы затем используете js для перезагрузки страницы.
Если вы не хотите использовать js, тогда включите ваш флажок для ввода (type = submit) и встроить его в форму. Когда пользователь нажимает на ввод, форма будет добавлена к выбранному действию, которое в свою очередь возвращает this.View («MyViewName»).
Edit
Вот пример использования JQuery, основанный на вашем редактировании:
HTML / JS:
<div class="checkbox">
@if(answer.HasVotes)
{
<input type="checkbox" name="Vote" id="Vote" checked data-id="@item.Id" />
}
else
{
<input type="checkbox" name="Vote" id="Vote" unchecked data-id="@item.Id" />
}
</div>
<script>
$(document).ready(function () {
$('#Vote').change(function () {
var $this = $(this);
var answerId = $this.data('id');
var url = null;
if($this.is('checked')){
url = `/UpVote?answerId=${answerId}`;
}
else{
url = `/DownVote?answerId=${answerId}`;
}
$.ajax({
type: 'POST',
url: url ,
success: function (data) {
location.reload();
},
error: function (data) {
alert(data);
}
})
});
});
</script>
Контроллер:
public IActionResult Index()
{
return this.View(new AnswerViewModel(this.AnswerRepository.GetAll()));
}
[HttpPost]
public IActionResult UpVote(Guid answerId)
{
//Retrieve the answer that has been voted for
Answer answer = this.AnswerRepository.FindById(answerId);
//Add the vote
answer.UpVote();
//Save changes
this.AnswerRepository.SaveChanges();
// Return 200 OK
return this.Ok();
}
[HttpPost]
public IActionResult DownVote(Guid answerId)
{
//Retrieve the answer that has been voted for
Answer answer = this.AnswerRepository.FindById(answerId);
//Add the vote
answer.DownVote();
//Save changes
this.AnswerRepository.SaveChanges();
// Return 200 OK
return this.Ok();
}
Что произойдет, что после нажатия кнопки-флажка для действия UpVote / DownVote будет сделан вызов Ajax, передав ему аргументы, необходимые для получения ответа и его подтверждения (в данном случае я передал идентификатор ответа, сохраненный в атрибут html). Если действие выполнено успешно, он вернет 200 OK, что, в свою очередь, заставит JS выполнить функцию успеха. Последний перезагружает страницу, и ваша страница повторно отображается с обновленными ответами, показывая конечному пользователю ответы, за которые проголосовали.