我是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的列表看看它是什么但是它显示为零。所以,我怎么能这样做?用另一个对象列表(嵌套)传递一个对象列表。这可能吗?只有通过一个对象列表是没有意义的而且只有一个对象。
答案 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>
当然,如果有人有更好的方法来做到这一点,我全都耳朵。 :)