如何使用asp-for标签绑定数组?

wh1*_*p3r 7 asp.net-core-mvc asp.net-core

我想问一下,如何在Asp.NET Core MVC中绑定一个数组?

<input type="text" asp-for="Requests[@index].Name" />
Run Code Online (Sandbox Code Playgroud)

它在旧版本的ASP MVC中运行良好.此示例显示"内部服务器错误".

" 在编译处理此请求所需的资源期间发生错误.请查看以下特定错误详细信息并适当修改源代码. "

ViewModel类示例:

public class ViewModel
{
    public List<Model> Requests {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

模型类示例:

public class Model
{
    public string Name {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

它应该如何工作?提交带有这些输入的表单后,MVC应自动在ModelView中创建并映射列表.这就是它在ASP.NET MVC 4中的工作方式.

Dan*_*.G. 19

你需要使用一个asp-for可以编译的有效表达式,基本上如果index你是在for循环中使用的变量那么你会写<input asp-for="@Model.Requests[index].Name" />

完整示例(我用作i循环变量而不是index):

@model MyProject.TodoItemList

<ul>
@for (int i = 0; i < Model.Requests.Count; i++)
{
    <li>                
        <label asp-for="@Model.Requests[i].Name"></label>
        <input asp-for="@Model.Requests[i].Name"/>
        @* Or the old html helpers if you prefer
           @Html.DisplayFor(model => model.Requests[i].Name)
        *@                
    </li>
}
</ul>
Run Code Online (Sandbox Code Playgroud)

欲了解更多信息,请表达的名称和类别的文档


小智 5

如果您想使用单独的部分视图绑定列表:

首先,创建返回列表的操作。

public async Task<ActionResult> UpdateTable([FromForm]Filter filter)
{
    if (ModelState.IsValid)
    {           
        List<Model> model = new List<Model>();
        ViewData.TemplateInfo.HtmlFieldPrefix = string.Format("Requests");
        return PartialView("_PartialViewOfModel", model);
    }
    return BadRequest(ModelState);
}
Run Code Online (Sandbox Code Playgroud)

这段代码将出现在您的部分视图中。

@model List<Model>
@for (int i = 0; i < Model.Count; i++)
{
    <input type="text" class="form-control form-control-sm" asp-for="@Model[i].Name" />
}
Run Code Online (Sandbox Code Playgroud)