gpt4 book ai didi

c# - 如何在 ASP.NET Razor 页面中的 DropDown 更改上重新加载/调用 OnGet 或 OnPost 方法

转载 作者:行者123 更新时间:2023-12-03 17:01:55 26 4
gpt4 key购买 nike

我将 Asp.Net Core Razor Pages 用于我的一个静态网站。

我的页面上有一个下拉菜单,我使用以下代码绑定(bind)它。

[BindProperty]
public string selectedFilter { get; set; }

public List<SelectListItem> Options { get; set; }

public void OnGet()
{
this.Options = new List<SelectListItem> {
new SelectListItem { Text = "Test1", Value = "1" },
new SelectListItem { Text = "Test2", Value = "2" },
new SelectListItem { Text = "Test3", Value = "3" },
};
selectedFilter = "3";
}

在 cshtml 中
<select asp-for="selectedFilter" asp-items="Model.Options"></select>

页面加载后 - 下拉列表正确呈现

现在,我只想知道如何处理 onchange Dropdown 事件,因此它调用 OnGet/OnPost Razor 页面的方法,我可以得到 selectedFilter 中的值属性(property)。

基本上我正在对 Dropdown 的更改事件进行内容过滤。

我用了 https://www.learnrazorpages.com/razor-pages/forms/select-lists作为引用。

先感谢您。

更新(答案)

我通过将 SELECT 放入 FORM 元素中获得了成功,如下所示。

<form method="post">
<!-- Other HTML -->
<select asp-for="selectedFilter" asp-items="Model.Options" onchange="this.form.submit();"></select>
<!-- Other HTML -->
</form>

并将以下 OnPost 方法添加到 CS 文件中。

public void OnPost()
{
//Here you will get the selected value into selectedFilter
}

谢谢大家帮助我

最佳答案

onchange()调用 javascript 函数,您需要使用 ajax 将数据发布到 Razor 页面处理程序。

Razor Pages 旨在防止 (CSRF/XSRF) 攻击。因此,防伪 token 验证会自动包含在 Razor 页面中。您需要发送正确的 RequestVerificationToken在您的 ajax 请求的 header 中。

Index.cshtml 与 form

<form>
@Html.AntiForgeryToken()
<select id="myDropdown" asp-for="selectedFilter" asp-items="Model.Options" onchange="sendData()"></select>
</form>
@section Scripts{
<script>
function sendData() {
var selectedFilter = $("#myDropdown").val();
$.ajax({
type: "POST",
url: "/Home/Index",
data: { selectedFilter: selectedFilter },
headers: {
RequestVerificationToken: $('input:hidden[name="__RequestVerificationToken"]').val()
},
success: function (result) {
alert("success");
},
error: function () {
alert("there was an error");
}
})
}
</script>
}

或直接不带 form
<select id="myDropdown" asp-for="selectedFilter" asp-items="Model.Options" onchange="sendData()"></select>

@section Scripts{
<script>
function sendData() {

var token = '@Html.AntiForgeryToken()';

var selectedFilter = $("#myDropdown").val();
$.ajax({
type: "POST",
url: "/Projects/TestSelectList",
data: { selectedFilter: selectedFilter },
headers: {
RequestVerificationToken: $(token).val()
},
success: function (result) {
alert("success");
},
error: function () {
alert("there was an error");
}
})
}
</script>
}

添加 POST您的 Index.cshtml.cs 中的处理程序并添加断点检查:
[BindProperty]
public string selectedFilter { get; set; }
public void OnPost()
{
var data = selectedFilter;
}

关于c# - 如何在 ASP.NET Razor 页面中的 DropDown 更改上重新加载/调用 OnGet 或 OnPost 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59138573/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com