razor - 如何在 for 循环中设置 asp-for
问题描述
我有一个 for 循环来在表单上生成字段。
如何根据当前索引设置asp-for的值?
<label asp-for=@("Value" + i) class="control-label"></label>
不起作用。
解决方案
您可以使用 etherforeach
或将模型与索引绑定for
:
@page
@model IndexModel
@{
ViewData["Title"] = "Home page";
int i = 0;
}
<form method="post">
@foreach (var item in Model.Items)
{
<input asp-for="Items[i]" />
i++;
}
@for (int j = 0; j < Model.Items.Count; j++)
{
<input asp-for="Items[j]" />
}
<button type="submit">Submit</button>
</form>
以及背后的代码:
public class IndexModel : PageModel
{
[BindProperty]
public List<string> Items { get; set; }
public void OnGet()
{
Items = new List<string> { "one", "two", "three" };
}
public void OnPost(List<string> items)
{
}
}
以下是它的工作原理:
在这个控制器中,你有 2 个动作,一个返回一个字符串列表,这些字符串将是模型。第二个动作将接受一个参数作为字符串列表。
[Route("[controller]")]
public class TestController : Controller
{
[HttpGet("[action]")]
public IActionResult Test()
{
return View(new List<string> { "one", "two", "three" });
}
[HttpPost("[action]")]
public IActionResult Test(List<string> Words)
{
return Ok();
}
}
现在在我们的测试视图Test.cshtml
文件中,我们想要显示这个字符串列表及其索引,当我们更改这些值时,我们希望能够发布它们。
@model List<string>
@{
int i = 0;
}
<form method="post">
@foreach (var item in Model)
{
<label>@item - @i</label>
<input name="Words[@i]" value="@item" />
i++;
}
<button type="submit">Submit</button>
</form>
结果如下:
name
并且在提交表单后,由于 html属性,输入字段中的值将出现在字符串列表中。
您必须了解asp-for
Razor 使用标签助手在字段上生成各种 html 属性,例如 name/id/data-* 等...您需要的主要是name
绑定值的属性。
推荐阅读
- mysql - 使用连接删除多个表而不是删除所有表
- mysql - MySQL:使用 COUNT() 对总金额进行排名
- python - 仅将多索引熊猫数据框中特定日期的正值归零
- function - Tcl 8.4:扩展变量用作过程的参数
- javascript - 当我按下“全部”复选框时“我没有得到任何数据。我在这里做错了什么?
- javascript - Firefox“触摸模拟”模式为双击发出三个点击事件
- chisel - 解复用器:未连接的电线/firrtl错误
- html - 使用 contenteditable = "false" 设置 div
- python - 根据 Python pandas 中的列数据比较两个数据框
- wordpress - Wordpress 反向代理