如何动态更改 Razor 页面中的按钮属性?
How to dynamically change Button Attr in Razor Page?
我正在尝试获取一个按钮以在 MVC Razor 视图中的两个状态之间切换。
Startup.cs(配置防伪服务)
public void ConfigureServices(IServiceCollection services)
{
services.AddAntiforgery(o => o.HeaderName = "XSRF-TOKEN");
services.AddControllersWithViews();
}
查看(使用 JS)
@Html.AntiForgeryToken()
<div class="row">
<div class="col-4" style="background-color: none">
<button id="ms1" class="btn btn-primary">Misc Buttons 1</button>
<button id="ms2" class="btn btn-success">Misc Buttons 2</button>
</div>
<div id="UpdateButonStatusEvery2s" style="background-color: none">
<button id="btnPause" class="btn btn-danger" value="Pause">Pause</button>
</div>
<div class="col-7" style="float: right; background-color: none">
<button id="ms3" class="btn btn-info">Misc Buttons 3</button>
<button id="ms4" class="btn btn-success">Misc Buttons 4</button>
<button id="ms5" class="btn btn-success">Misc Buttons 5</button>
<button id="ms6" class="btn btn-danger">Misc Buttons 6</button>
</div>
</div>
@section Scripts
{
<script type="text/javascript">
$("#btnToggle").click(function (e) {
alert("test");
var data = $(this).val();
$.ajax({
type: "POST",
url: '../Home/OnPostTest/',
data: { data: data },
beforeSend: function (xhr) {
xhr.setRequestHeader("XSRF-TOKEN",
$('input:hidden[name="__RequestVerificationToken"]').val());
},
dataType: "json",
success: function (response) {
if (response.result == "ToggleDanger") {
var newRow = '<button id="btnToggle" class="btn btn-success" value="Danger">Danger</button>';
$('#UpdateButonStatusEvery2s').html(newRow);
}
else if (response.result == "TogglePause") {
var newRow = '<button id="btnToggle" class="btn btn-danger" value="Pause">Pause</button>';
$('#UpdateButonStatusEvery2s').html(newRow);
}
}
});
});
</script>
}
控制器
public IActionResult OnPostTest(string data)
{
string responseData;
if (data == "Danger")
{
responseData = "TogglePause";
return new JsonResult(new { result = responseData });
}
else if (data == "Pause")
{
responseData = "ToggleDanger";
return new JsonResult(new { result = responseData });
}
return new JsonResult(null);
}
有了这个,它可以从 initial "Pause"
按钮切换到 "Danger"
按钮。但是,带有新危险按钮 HTML 的更新 div 无法识别按钮 ID,因为 alert("test");
在单击 "Danger" btn
时根本不会触发。
基于此;然而,由于我不确定如何集成 PageModel,我选择了 onPostTest
的常规控制器,这可能是一个 XY 问题,但任何指导将不胜感激。
你可以尝试这样修改你的js:
$("#btnToggle").click(function () {
alert("test");
var data = $(this).val();
$.ajax({
type: "POST",
url: '../Home/OnPostTest/',
data: { data: data },
beforeSend: function (xhr) {
xhr.setRequestHeader("XSRF-TOKEN",
$('input:hidden[name="__RequestVerificationToken"]').val());
},
dataType: "json",
success: function (response) {
if (response.result == "ToggleDanger") {
$('#btnToggle').removeClass('btn-danger');
$('#btnToggle').addClass('btn-success');
$('#btnToggle').html("Danger");
$('#btnToggle').attr("value","Danger");
}
else if (response.result == "TogglePause") {
$('#btnToggle').removeClass('btn-success');
$('#btnToggle').addClass('btn-danger');
$('#btnToggle').html("Pause");
$('#btnToggle').attr("value", "Pause");
}
}
});
});
结果:
我正在尝试获取一个按钮以在 MVC Razor 视图中的两个状态之间切换。
Startup.cs(配置防伪服务)
public void ConfigureServices(IServiceCollection services)
{
services.AddAntiforgery(o => o.HeaderName = "XSRF-TOKEN");
services.AddControllersWithViews();
}
查看(使用 JS)
@Html.AntiForgeryToken()
<div class="row">
<div class="col-4" style="background-color: none">
<button id="ms1" class="btn btn-primary">Misc Buttons 1</button>
<button id="ms2" class="btn btn-success">Misc Buttons 2</button>
</div>
<div id="UpdateButonStatusEvery2s" style="background-color: none">
<button id="btnPause" class="btn btn-danger" value="Pause">Pause</button>
</div>
<div class="col-7" style="float: right; background-color: none">
<button id="ms3" class="btn btn-info">Misc Buttons 3</button>
<button id="ms4" class="btn btn-success">Misc Buttons 4</button>
<button id="ms5" class="btn btn-success">Misc Buttons 5</button>
<button id="ms6" class="btn btn-danger">Misc Buttons 6</button>
</div>
</div>
@section Scripts
{
<script type="text/javascript">
$("#btnToggle").click(function (e) {
alert("test");
var data = $(this).val();
$.ajax({
type: "POST",
url: '../Home/OnPostTest/',
data: { data: data },
beforeSend: function (xhr) {
xhr.setRequestHeader("XSRF-TOKEN",
$('input:hidden[name="__RequestVerificationToken"]').val());
},
dataType: "json",
success: function (response) {
if (response.result == "ToggleDanger") {
var newRow = '<button id="btnToggle" class="btn btn-success" value="Danger">Danger</button>';
$('#UpdateButonStatusEvery2s').html(newRow);
}
else if (response.result == "TogglePause") {
var newRow = '<button id="btnToggle" class="btn btn-danger" value="Pause">Pause</button>';
$('#UpdateButonStatusEvery2s').html(newRow);
}
}
});
});
</script>
}
控制器
public IActionResult OnPostTest(string data)
{
string responseData;
if (data == "Danger")
{
responseData = "TogglePause";
return new JsonResult(new { result = responseData });
}
else if (data == "Pause")
{
responseData = "ToggleDanger";
return new JsonResult(new { result = responseData });
}
return new JsonResult(null);
}
有了这个,它可以从 initial "Pause"
按钮切换到 "Danger"
按钮。但是,带有新危险按钮 HTML 的更新 div 无法识别按钮 ID,因为 alert("test");
在单击 "Danger" btn
时根本不会触发。
基于此onPostTest
的常规控制器,这可能是一个 XY 问题,但任何指导将不胜感激。
你可以尝试这样修改你的js:
$("#btnToggle").click(function () {
alert("test");
var data = $(this).val();
$.ajax({
type: "POST",
url: '../Home/OnPostTest/',
data: { data: data },
beforeSend: function (xhr) {
xhr.setRequestHeader("XSRF-TOKEN",
$('input:hidden[name="__RequestVerificationToken"]').val());
},
dataType: "json",
success: function (response) {
if (response.result == "ToggleDanger") {
$('#btnToggle').removeClass('btn-danger');
$('#btnToggle').addClass('btn-success');
$('#btnToggle').html("Danger");
$('#btnToggle').attr("value","Danger");
}
else if (response.result == "TogglePause") {
$('#btnToggle').removeClass('btn-success');
$('#btnToggle').addClass('btn-danger');
$('#btnToggle').html("Pause");
$('#btnToggle').attr("value", "Pause");
}
}
});
});
结果: