输入显示列表中不同元素的值
Input displays the value of a different element of the list
当我尝试将输入元素与列表项绑定时遇到问题。我遇到此问题的页面非常复杂,因此我将尝试使用带有字符串列表的简单剃刀页面来重现该问题。我的 Razor Page PageModel 如下:
public class TestListModel : PageModel
{
[BindProperty]
public List<string> Titles { get; set; }
public IActionResult OnGet()
{
Titles = new List<string> { "Jan", "Feb", "Mar", "Apr" };
return Page();
}
public IActionResult OnPost()
{
Titles = Titles.OrderBy(m => m).ToList();
return Page();
}
}
我有一个标题 属性,它有一个 BindProperty 属性。在 OnGet 方法中,我只添加了一个包含四个字符串的简短列表(一年的前四个月)。在 OnPost 方法中,我只是对标题进行排序。
下面你可以看到等效的 html。
<form method="post">
@for (int i = 0; i < Model.Titles.Count(); i++)
{
<div class="form-group">
<div>Value in div : @Model.Titles[i]</div>
<input asp-for="Titles[i]" class="form-control" />
</div>
}
<input type="submit" value="Submit" />
</form>
我有一个表单,其中包含一个循环,该循环显示元素的值和列表中每个元素的输入。我还有一个提交按钮,以便 post 列表的元素返回服务器。 OnGet 方法生成以下结果。
似乎一切正常。对于每个元素,我们将值显示为文本和一个包含元素值的输入。
现在我点击提交按钮以点击将对数据进行排序的 OnPost 方法,更新后的视图如下:
如您所见,每个元素的文本都正确显示。它们按照我们在 OnPost 方法中更改列表的方式进行排序,但输入包含表单提交的值,而不是在对列表进行排序后具有更新的值。
谁能告诉我如何修复 <input asp-for="Titles[i]" class="form-control" />
标签,使其显示当前元素实际具有的值?
Can someone tell me how to fix the tag so that it will display the value that the current element actually has?
我可以重现同样的问题,我发现它似乎先于 Model 从 ModelState 获取值,这导致了上述问题。
要修复它,我们可以尝试清除它,如下所示。
public IActionResult OnPost()
{
Titles = Titles.OrderBy(m => m).ToList(); ;
// var ms_values = ModelState.Values;
ModelState.Clear();
return Page();
}
注:ModelState的值
当我尝试将输入元素与列表项绑定时遇到问题。我遇到此问题的页面非常复杂,因此我将尝试使用带有字符串列表的简单剃刀页面来重现该问题。我的 Razor Page PageModel 如下:
public class TestListModel : PageModel
{
[BindProperty]
public List<string> Titles { get; set; }
public IActionResult OnGet()
{
Titles = new List<string> { "Jan", "Feb", "Mar", "Apr" };
return Page();
}
public IActionResult OnPost()
{
Titles = Titles.OrderBy(m => m).ToList();
return Page();
}
}
我有一个标题 属性,它有一个 BindProperty 属性。在 OnGet 方法中,我只添加了一个包含四个字符串的简短列表(一年的前四个月)。在 OnPost 方法中,我只是对标题进行排序。
下面你可以看到等效的 html。
<form method="post">
@for (int i = 0; i < Model.Titles.Count(); i++)
{
<div class="form-group">
<div>Value in div : @Model.Titles[i]</div>
<input asp-for="Titles[i]" class="form-control" />
</div>
}
<input type="submit" value="Submit" />
</form>
我有一个表单,其中包含一个循环,该循环显示元素的值和列表中每个元素的输入。我还有一个提交按钮,以便 post 列表的元素返回服务器。 OnGet 方法生成以下结果。
似乎一切正常。对于每个元素,我们将值显示为文本和一个包含元素值的输入。
现在我点击提交按钮以点击将对数据进行排序的 OnPost 方法,更新后的视图如下:
如您所见,每个元素的文本都正确显示。它们按照我们在 OnPost 方法中更改列表的方式进行排序,但输入包含表单提交的值,而不是在对列表进行排序后具有更新的值。
谁能告诉我如何修复 <input asp-for="Titles[i]" class="form-control" />
标签,使其显示当前元素实际具有的值?
Can someone tell me how to fix the tag so that it will display the value that the current element actually has?
我可以重现同样的问题,我发现它似乎先于 Model 从 ModelState 获取值,这导致了上述问题。
要修复它,我们可以尝试清除它,如下所示。
public IActionResult OnPost()
{
Titles = Titles.OrderBy(m => m).ToList(); ;
// var ms_values = ModelState.Values;
ModelState.Clear();
return Page();
}
注:ModelState的值