#c# #asp.net #asp.net-core
#c# #asp.net #asp.net-core
Вопрос:
У меня есть эта кнопка, которая изменяет логическое значение в базе данных после нажатия на нее. Если логическое PausedCMDBUpload = true
значение, кнопка должна отображать UNPAUSE, если логическое значение равно false
, оно должно отображать PAUSE.
Кнопка изменяет значение в базе данных, как и предполагалось, однако после первого нажатия кнопки страница обновится, но текст на кнопке останется прежним. После повторного нажатия текст изменится.
У кого-нибудь есть идея, почему значение на кнопке не меняется после первого щелчка? Любая помощь будет оценена!
Вид
<script>
function ClickButton1() {
$.ajax({
type: "POST",
url: "@Url.Action("ClickButton1", "Devices")",
async: true,
success: function (msg) {
ServiceSucceeded(msg);
},
error: function () {
return "error";
}
});
}
</script>
@if (@Model.ElementAt(0).PauseCMDBUpload == true)
{
<input id="Button1" type="button" value="UNPAUSE" onclick="ClickButton1(); document.location.reload(true)" />
}
else
{
<input id="Button1" type="button" value="PAUSE" onclick="ClickButton1(); document.location.reload(true)" />
}
Контроллер
[HttpPost]
public void ClickButton1()
{
var entity = db.Devices;
foreach (var device in entity)
{
if (device.PauseCMDBUpload == false)
{
device.PauseCMDBUpload = true;
}
else
{
device.PauseCMDBUpload = false;
}
}
db.SaveChanges();
}
Комментарии:
1. С чего бы это? Вы отправляете сообщение в действие, вызываемое
ChancePauseCMDBUpload
в контроллереDevices
. Но вызывается единственное действие на стороне сервера, которое вы показываетеClickButton1
. Поэтому я полагаю, что где-то в процессе вы получаете ошибку 404 NotFound2. Мой плохой, это какой-то старый код, который я использовал для тестирования. Я отредактировал свой вопрос.
3. Может быть проблема с синхронизацией. Ваш вызов ajax является асинхронным, поэтому вы вызываете
reload
до завершения вызова ajax…4. Можно ли попробовать в формате …$(«Button1»).click(function(e) { e.preventDefault(); $.ajax({ type: «POST», url: «/ClickButton1/Devices/»
5.
document.location.reload(true)
вероятно, должно быть внутриsuccess
.
Ответ №1:
Вы можете изменить свой код следующим образом:
<script>
function ClickButton1() {
$.ajax({
type: "POST",
url: "@Url.Action("ClickButton1", "Devices")",
async: true,
success: function (msg) {
var btnText = $('#Button1').val();
if (btnText == "UNPAUSE")
$('#Button1').val('PAUSE');
else
$('#Button1').val('UNPAUSE');
ServiceSucceeded(msg);
},
error: function () {
return "error";
}
});
}
</script>
@if (@Model.ElementAt(0).PauseCMDBUpload == true)
{
<input id="Button1" type="button" value="UNPAUSE" onclick="ClickButton1();" />
}
else
{
<input id="Button1" type="button" value="PAUSE" onclick="ClickButton1();" />
}