在asp.net core 2.0中从客户端获取对象列表

时间:2017-12-04 12:29:42

标签: c# asp.net-core-2.0

我是asp.net核心的新手。我一直在阅读,现在我知道如何通过post方法将表单上的数据作为对象提交给后面的代码。没关系。但是如何发送对象列表呢?我需要做的是(在这个例子中,它将是一个酒店管理室类型和费率类型)类似网格,我有一个房间类型列表,其中每个都有一个费率类型列表。我怎样才能做到这一点?正如我所做的那样,我可以通过房间类型的名称(虽然只作为一个对象),但不是任何费率。

我喜欢这样(模特):

public class RateType
    {
        public string Name { get; set; }
        public bool IsActive { get; set; }
    }

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

        public List<RateType> Rates { get; set; } = new List<RateType>();
    }

在HomeController中:

public IActionResult RoomConfig()
        {
            return View(room);
        }

        [HttpGet]
        public ViewResult SaveRoomConfig()
        {

            return View("RoomConfig");
        }

        [HttpPost]
        public ViewResult SaveRoomConfig(RoomType room)
        {

            return View("RoomConfig");
        }

在视图中:

@model RoomType
@{
    ViewData["Title"] = "RoomConfig";
}

<h2>@Model.Name</h2>

<form class="p-a-1" asp-action="SaveRoomConfig" method="post">
    @foreach (var item in Model.Rates)
    {
        <label asp-for="Name">@item.Name </label>
        <input class="form-control" asp-for="Name" />
        <input asp-for="@item.IsActive" type="checkbox" />

    }
    <button type="submit">Send</button>

</form>

因此,我发送一个带有一些预定义值的初始对象,仅用于测试,它们显示在页面上。但是,当我点击“发送”时,我只能发送第一个对象(有意义,因为我只有一个对象参数,所以它只会发送第一个。但是,我还是试着把一个RoomType的列表看看它是什么但是它显示为零。所以,我怎么能这样做?用另一个对象列表(嵌套)传递一个对象列表。这可能吗?只有通过一个对象列表是没有意义的而且只有一个对象。

1 个答案:

答案 0 :(得分:0)

好的,我意识到为什么它不起作用。我正在做的一切正确,除了我将项目绑定到空列表的事实,根据定义,它没有任何项目。因此,为了获得索引,我写了一个'for'语句而不是'foreach'。这样,我将对象绑定到列表中的位置,而不是不存在的对象。像这样:

@model RoomType
@{
    ViewData["Title"] = "RoomConfig";
}


<form class="p-a-1" asp-action="SaveRoomConfig" method="post">
    <input asp-for="Name" />
    @for (int i=0;i< Model.Rates.Count;i++)
    {
        <div class=" form-control">
            <label asp-for="@Model.Rates[i].Name">@Model.Rates[i].Name </label>
            <input asp-for="@Model.Rates[i].Name" />
            <input asp-for="@Model.Rates[i].IsActive" type="checkbox" />
        </div>
    }
    <button type="submit">Send</button>

</form>

当然,如果有人有更好的方法来做到这一点,我全都耳朵。 :)