如何从 ListItem 获取整数 LocationId 到 ViewModel?

How to get integer LocationId into ViewModel from ListItem?

在我的 form 中,我有一个 DropDownList,我在其中填充来自 Database table Locations 的数据。当用户选择 LocationName 时,相应的 LocationId 应该保存到 ViewModel 中,这样我就可以将它传递给 POST 方法以将数据保存到 Database。但是,我得到的不是相应的 LocationId,而是 0

查找原因,发现由于ListItem需要valuetext字段,格式为string,在保存数据时,我我被迫使用 .ToString()LocationId 转换为 string。如何将 LocationId 存储到 ViewModel 中?

代码片段:

控制器

public IActionResult Locate(int Id)
{
    InventoryLocationsHistoryViewModel locationsHistoryVM = new InventoryLocationsHistoryViewModel();

    // Populating Locations DropDownList
    var locationsList = new List<InventoryLocations>();
    locationsList = _context.InventoryLocations.ToList();
    var locations = locationsList.OrderBy(l => l.LocationName).Select(us => new SelectListItem { Value = us.LocationId.ToString(), Text = us.LocationName }).ToList();
    ViewBag.Locations = locations;

    return View(locationsHistoryVM);
}

查看

<label asp-for="LocationId" class="fg-labels" for="locationName"></label>
<select asp-for="LocationId" asp-items="ViewBag.Locations" class="chosen disabledropdowncntrl" data-placeholder="Choose a Location" name="locationName" id="dropDownLocationNames">
    <option value=""></option>
</select>

ViewModel

public int LocationId { get; set; }
public InventoryLocations Location { get; set; }

怎么办?

发布表单时,参数以输入的 name 值命名。所以目前发布的是locationName=5,因为你在select:

中有这个
name="locationName"

看来您需要将其更改为

name="locationId"

匹配视图模型中的参数名称。

而且不用担心字符串与整数,模型绑定应该能够搞清楚。