如何将视图模型中的一个项目绑定到控制器中



i在ASP.NET Core Razor中具有一个视图模型,该模型具有称为"场所"的对象列表。我正在尝试将其中一个场地(20中(的一个格式地址和格式化的地址发送到邮政控制器。

问题是,当我尝试使用时,它不绑定到控制器方法。这是控制器方法:

public async Task<IActionResult> MeetDetailsVenueChange(string reference, MeetDetailsView mdv)

这是视图模型:

public class MeetDetailsView
    {
        public string City { get; set; }
        public string RecipientCity { get; set; }
        public string VenueAddress { get; set; }
        public string Reference { get; set; }
        public string HostPlaceId { get; set; }
        public string RecipientPlaceId { get; set; }
        public string VenuePlaceId { get; set; }
        public List<Venue> Venues { get; set; }
}

这是场地模型:

public class Venue {
  public int VenueId { get; set; }
        public string Reference { get; set; }
        public string PlaceId { get; set; }
        public string Name { get; set; }
        public string FormattedAddress { get; set; }
        public string Latitude { get; set; }
        public string Longitude { get; set; }
        public string Rating { get; set; }
        public string PriceLevel { get; set; }
        // Distance between returned location and midpoint.
        public string Distance { get; set; }
}

以下是:

<form asp-action="MeetDetailsVenueChange">
<button type="submit" style="display: block; width: 100%; height:100px;" class="btn btn-outline-secondary" value="@Model.Venues[i].FormattedAddress">
<i class="material-icons" style="width:auto; color:white;">
star_border
</i>
</button>
<div class="form-group">
<input type="hidden" asp-for="Venues[i]" class="form-control" />
<span asp-validation-for="Venues[i]" class="text-danger"></span>
</div>
<div class="form-group">
<input type="hidden" asp-for="Venues[i].FormattedAddress" class="form-control" />
<span asp-validation-for="Venues[i].FormattedAddress" class="text-danger"></span>
</div>
<div class="form-group">
<input type="hidden" asp-for="Reference" class="form-control" />
<span asp-validation-for="Reference" class="text-danger"></span>
</div>
</form>

注意:此表格为for循环:

      @for (int i = 0; i < Model.Venues.Count(); i++)
        {
...
        }

在原始视图模型中的每个场所都迭代。当我设置一个断点时,请求的密钥是:

[0] "Venues[1].FormattedAddress"   string
[1] "Reference"                    string
[2] "__RequestVerificationToken"   string

目前,它仅与选定的第一个场地结合 - 我希望它适用于" ITH"模型。如果我在列表中选择按钮15,则应返回列表中15的值。唯一始终束缚的是参考,它似乎仅仅是因为参考号不在场地列表中。

似乎我需要能够将场地绑定[0-20]。formattedAddress到帖子上的控制器方法,但是我不确定为什么它只返回第一个场地。该文档也没有通过邮政方法上的集合或如何从帖子上的集合中绑定特定对象的示例。我认为我缺乏对形式的发布方式的理解。

感谢Jasen的建议 - 我添加了

Venue SelectedVenue

参数到我的视图模型,并以这样的形式绑定 -

<form asp-action="MeetDetailsVenueChange">
<button type="submit" style="display: block; width: 100%; height:100px;" class="btn btn-outline-secondary" value="@Model.Venues[i].FormattedAddress">
<i class="material-icons" style="width:auto; color:white;">
star_border
</i>
</button>
<div class="form-group">
<input type="hidden" asp-for="SelectedVenue.FormattedAddress" value="@Model.Venues[i].FormattedAddress" class="form-control" />
</div>
<div class="form-group">
<input type="hidden" asp-for="SelectedVenue.VenueId" value="@Model.Venues[i].VenueId" class="form-control" />
</div>
<div class="form-group">
<input type="hidden" asp-for="SelectedVenue.PlaceId" value="@Model.Venues[i].PlaceId" class="form-control" />
</div>
<div class="form-group">
<input type="hidden" asp-for="Reference" class="form-control" />
<span asp-validation-for="Reference" class="text-danger"></span>
</div>
</form>

它就像魅力一样!请注意,我专门使用ASP -For来绑定列表中所选项目的模型部分 - 我的值等于for循环中列表中的ITH项目。

最新更新