发布一个字符串数组
Posting an array of string
我正在尝试 post 一个字符串数组到 Razor Pages 项目中的 post 操作。为此,我考虑使用隐藏的 <select>
标签。用户会在文本框中输入文本,按下一个按钮,然后我会向 <select>
添加一个新选项,然后 post 使用提交按钮添加整个内容。但是,在 posted 之后,我的模型的数组 属性 是空的。
有谁知道是否有更好的方法或者我做错了什么?
剃刀:
<form method="post">
<input id="string-value" />
<input type="button" id="add-item" value="Add item" />
<select asp-items="@Model.Model.ArrayOfStrings" id="hidden-select"></select>
<table id="table-items">
</table>
<input type="submit" value="Submit" />
</form>
public class ArrayModel
{
public List<SelectListItem> ArrayOfStrings { get; set; } = new List<SelectListItem>();
}
public class IndexModel : PageModel
{
[BindProperty]
public ArrayModel Model { get; set; }
public void OnGet()
{
Model = new ArrayModel();
}
public void OnPost()
{
System.Diagnostics.Debugger.Break();
}
}
JS:
$('#add-item').on('click', function () {
debugger;
var value = $('#string-value').val();
$('#hidden-select').append(new Option(value, value));
$('#table-item tr:last').after('<tr><td>' + value + '</td></tr>')
});
可以找到存储库 here。
select 的选项将不会发布,因此这将不起作用。
最简单的方法是将结果附加到带有分隔符 char 的隐藏输入,然后在服务器端进行字符串拆分。
另一种可能更优雅的方法是添加具有相同名称的隐藏输入。每个输入都有自己的值。然后您应该能够在服务器上将其作为列表或数组获取。
剃刀:
<input value="@String.Join(",", Model.Model.ArrayOfStrings)" id="tags"></select>
JS
$('#tags').val($('#tags').val() + ',' + value);
控制器
public void OnPost(string tags)
{
var tagsArray = tags.split(',');
}
我正在尝试 post 一个字符串数组到 Razor Pages 项目中的 post 操作。为此,我考虑使用隐藏的 <select>
标签。用户会在文本框中输入文本,按下一个按钮,然后我会向 <select>
添加一个新选项,然后 post 使用提交按钮添加整个内容。但是,在 posted 之后,我的模型的数组 属性 是空的。
有谁知道是否有更好的方法或者我做错了什么?
剃刀:
<form method="post">
<input id="string-value" />
<input type="button" id="add-item" value="Add item" />
<select asp-items="@Model.Model.ArrayOfStrings" id="hidden-select"></select>
<table id="table-items">
</table>
<input type="submit" value="Submit" />
</form>
public class ArrayModel
{
public List<SelectListItem> ArrayOfStrings { get; set; } = new List<SelectListItem>();
}
public class IndexModel : PageModel
{
[BindProperty]
public ArrayModel Model { get; set; }
public void OnGet()
{
Model = new ArrayModel();
}
public void OnPost()
{
System.Diagnostics.Debugger.Break();
}
}
JS:
$('#add-item').on('click', function () {
debugger;
var value = $('#string-value').val();
$('#hidden-select').append(new Option(value, value));
$('#table-item tr:last').after('<tr><td>' + value + '</td></tr>')
});
可以找到存储库 here。
select 的选项将不会发布,因此这将不起作用。
最简单的方法是将结果附加到带有分隔符 char 的隐藏输入,然后在服务器端进行字符串拆分。
另一种可能更优雅的方法是添加具有相同名称的隐藏输入。每个输入都有自己的值。然后您应该能够在服务器上将其作为列表或数组获取。
剃刀:
<input value="@String.Join(",", Model.Model.ArrayOfStrings)" id="tags"></select>
JS
$('#tags').val($('#tags').val() + ',' + value);
控制器
public void OnPost(string tags)
{
var tagsArray = tags.split(',');
}