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

时间:2017-01-26 12:10:34

标签: asp.net-core asp.net-core-mvc

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

<input type="text" asp-for="Requests[@index].Name" />

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

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

ViewModel类示例:

public class ViewModel
{
    public List<Model> Requests {get;set;}
}

模型类示例:

public class Model
{
    public string Name {get;set;}
}

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

2 个答案:

答案 0 :(得分:12)

您需要使用可以编译的index的有效表达式,基本上如果<input asp-for="@Model.Requests[index].Name" />是您在for循环中使用的变量,那么您将编写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> ):

from random import randint
secretNumber=randint(1,10)

number = raw_input("Guess")
number = int(number)

while "number"!=secretNumber:
    print "try again"
    number = int (raw_input("Guess"))
elif "number"==secretNumber:

print "you won"

有关详细信息,请查看the docs

中的表达式名称和集合

答案 1 :(得分:1)

如果您想使用单独的局部视图来绑定列表,那时候流程将像这样。

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

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);
    }

下面的代码将显示在您的局部视图中。

@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" />}