如何从 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
需要value
和text
字段,格式为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"
匹配视图模型中的参数名称。
而且不用担心字符串与整数,模型绑定应该能够搞清楚。
在我的 form
中,我有一个 DropDownList
,我在其中填充来自 Database
table Locations
的数据。当用户选择 LocationName
时,相应的 LocationId
应该保存到 ViewModel
中,这样我就可以将它传递给 POST
方法以将数据保存到 Database
。但是,我得到的不是相应的 LocationId
,而是 0
。
查找原因,发现由于ListItem
需要value
和text
字段,格式为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"
匹配视图模型中的参数名称。
而且不用担心字符串与整数,模型绑定应该能够搞清楚。