输入显示列表中不同元素的值

Posted

技术标签:

【中文标题】输入显示列表中不同元素的值【英文标题】:Input displays the value of a different element of the list 【发布时间】:2020-06-11 23:30:05 【问题描述】:

当我尝试将输入元素与列表项绑定时遇到问题。我遇到此问题的页面非常复杂,因此我将尝试使用带有字符串列表的简单剃须刀页面来重现该问题。我的 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();
    

我有一个 Titles 属性,它有一个 BindProperty 属性。在 OnGet 方法中,我只添加了四个字符串的简短列表(一年的前四个月)。在 OnPost 方法中,我只是对 Titles 进行排序。

您可以在下面看到等效的 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>

我有一个表单,其中包含一个循环,该循环显示元素的值和列表中每个元素的输入。我还有一个提交按钮,以便将列表的元素发布回服务器。 OnGet 方法生成以下结果。

似乎一切正常。对于每个元素,我们都有以文本形式显示的值和一个包含元素值的输入。

现在我单击提交按钮以点击 OnPost 方法,该方法将对数据进行排序,更新后的视图如下:

如您所见,每个元素的文本都正确显示。它们的排序方式与我们在 OnPost 方法中更改列表的方式相同,但输入包含表单提交的值,而不是列表排序后的更新值。

谁能告诉我如何修复&lt;input asp-for="Titles[i]" class="form-control" /&gt; 标签,以便它显示当前元素实际具有的值?

【问题讨论】:

【参考方案1】:

谁能告诉我如何修复标签,以便它显示当前元素实际具有的值?

我可以重现同样的问题,我发现它似乎在 Model 之前从 ModelState 中获得了价值,这导致了上述问题。

要修复它,我们可以尝试清除它,如下所示。

public IActionResult OnPost()


    Titles = Titles.OrderBy(m => m).ToList(); ;

    // var ms_values = ModelState.Values;

    ModelState.Clear();

    return Page();

注意:ModelState 的值

【讨论】:

我有一个小问题。这也将消除所有模态错误。有没有办法在不删除模态错误消息的情况下做到这一点?

以上是关于输入显示列表中不同元素的值的主要内容,如果未能解决你的问题,请参考以下文章

给定一个集合,查找集合中一共多多少种不同的元素

Jquery自动完成未显示应出现在输入元素下方的值列表

Python - 如何用不同的值替换相邻的列表元素

如何让组合框选择与 ExtJS6 中显示的值不同的值?

如何获取div中特定元素点击时的值?

第10章 表单元素(中)