C# 如何将选项列表传递到后端

C# 如何将选项列表传递到后端,c#,asp.net-core,razor,C#,Asp.net Core,Razor,我在razor页面上有一个项目列表,用户可以在前端用javascript更新该列表: 我还具有此列表的绑定属性: [BindProperty] 公共列表回答{get;set;}=新列表{new SelectListItem(“Test1”,“Test1”)}; 当我在页面加载时传递数据时,绑定工作正常,但当我提交表单时,列表为空 以下是按下提交按钮前的HTML代码: 测试1 测试2 测试3 以及IDE的屏幕截图: 如您所见,代码中的列表为空。如何将用户添加的项目传递到后端 其他绑定属

我在razor页面上有一个项目列表,用户可以在前端用javascript更新该列表:


我还具有此列表的绑定属性:

[BindProperty]
公共列表回答{get;set;}=新列表{new SelectListItem(“Test1”,“Test1”)};
当我在页面加载时传递数据时,绑定工作正常,但当我提交表单时,列表为空

以下是按下提交按钮前的HTML代码:


测试1
测试2
测试3
以及IDE的屏幕截图:

如您所见,代码中的列表为空。如何将用户添加的项目传递到后端


其他绑定属性具有正确的数据。因此,问题仅在此列表中。

如果捕获请求并检查在浏览器F12开发者工具网络选项卡中发布的实际数据,您会发现它如下所示

//...
Answers.Add(new SelectListItem("Test2", "Test2", true));
Answers.Add(new SelectListItem("Test3", "Test3", true));
//...

无法绑定到
列表
类型属性
答案

如何将用户添加的项目传递到后端

为了满足您的需求,您可以尝试修改如下代码

//...
Answers.Add(new SelectListItem("Test2", "Test2", true));
Answers.Add(new SelectListItem("Test3", "Test3", true));
//...
在PageModel类中定义一个
列表
类型属性
SelectedAnswers

测试结果

更新:

我没有从选择列表中选择任何选项,因此我没有得到任何项目。但是,我不想要求用户选择选项;我想把它们都贴出来。有没有一种简单的方法可以做到这一点,或者我应该在提交之前使用javascript代码选择所有项目

在默认情况下,您可以在将新的SelectListItem添加到
列表答案时尝试添加,如下所示

//...
Answers.Add(new SelectListItem("Test2", "Test2", true));
Answers.Add(new SelectListItem("Test3", "Test3", true));
//...
此外,正如您所提到的,您还可以在提交表单之前使用JavaScript将所有项目/选项设置为selected

$("form").first().submit(function () {
    $('#myList option').prop('selected', true);
});

您能确认您正在发布表单吗?此问题背后的知识是
元素将以项目值数组的形式将其值发布到服务器。通常是字符串数组或整数数组。因此,您的模型必须具有相应的绑定属性
IEnumerable
IEnumerable
。属性名称必须与
的名称匹配(在最简单的情况下,不考虑前缀或带有
BindAttribute
..的自定义属性名称)。似乎我没有发布选项。至少我在表单数据部分看不到它们。但我做错了什么?我似乎没有发布选项。至少我在表单数据部分看不到它们。但是我做错了什么?
我在表单数据部分看不到它们
嗨@GrigoryZhadko,请检查您是否在
中添加了select标记帮助程序。您的意思是在
中吗?如果是,那么是的,我在里面添加了我的
。奇怪的是,我在附近有一个下拉选择,它按预期工作:
所以,我相信有一些绑定
的东西,你能在你的答案中添加javascript(或jquery)代码,这样它就可以完全完成,我可以将它标记为正确的吗?
Hi@GrigoryZhadko,我在上面的回复中已经用jquery代码进行了更新。