c# - 将字符串列表更新为模型属性
问题描述
我有这堂课:
public class Soup
{
public int Id { get; set; }
public string SoupName { get; set; }
// other properties
}
我有一个允许批量更新 SoupName 属性的视图。我的控制器中的 IActionResult 正确接收修改后的值:
public IActionResult QuickEdit(List<string> soups)
{
var soupNames = _soupRepository.AllSoups.Select(s => s.SoupName).ToList();
for (var i = 0; i < soupNames.Count; i++)
{
soupNames[i] = soups[i];
}
_soupRepository.UpdateSoupNames(soups);
return View(soups);
}
但我坚持使用 UpdateSoupNames 方法,我不知道如何只更新我的 Soup 对象的 SoupNames。我已经尝试了几件事,但是当我调用 _appDbContext.SaveChanges(); 没有任何东西被保存或更新。通过的汤是更新的。我只是无法将其正确保存到我的数据库中。在我尝试过的最新内容下方:
public void UpdateSoupNames(List<string> soups)
{
for(var i = 0; i < soups.Count; i++)
{
_appDbContext.Soups.Where(c => c.Id == i).ToList().Select(s => { s.SoupName = soups[i]; return s; });
}
_appDbContext.SaveChanges();
}
所以问题是,如何更新和保存作为字符串列表传递的字符串值。我需要更新并保存我的 SoupName 属性上的所有修改值。
解决方案
我不明白您在下面的这种方法中尝试做什么?你得到了 soupNames 并更新了它们,但是不使用结果?
public IActionResult QuickEdit(List<string> soups)
{
var soupNames = _soupRepository.AllSoups.Select(s => s.SoupName).ToList();
for (var i = 0; i < soupNames.Count; i++)
{
soupNames[i] = soups[i];
}
_soupRepository.UpdateSoupNames(soups);
return View(soups);
}
最佳实践是将完整模型(带有 id)传递给控制器,如果您只想“修补”汤名称,则模型中只会包含名称。但是,为了最小的变化,我会更新它以执行以下操作:
public IActionResult QuickEdit(List<string> soups)
{
var models = _soupRepository.AllSoups.ToList();
for (var i = 0; i < soupNames.Count; i++)
{
models[i].SoupName = soups[i];
}
_soupRepository.UpdateSoupNames(models);
return View(soups);
}
将完整模型传递给您的存储库将使 Repository 方法更具可重用性,正如我上面所说,如果您将 Id 与名称一起传递会更好。
推荐阅读
- javascript - 从需要使用 R/Rvest 登录的 javascript 网站抓取
- javascript - 关于 javascript 事件及其工作原理
- list - 使用列表迭代的子图标题
- python - 通过 Gitbash 访问 python(anaconda) 时是否需要包含任何特定步骤?
- python - 如何检查数据框中是否存在列表元素?
- swift - 如何确保在应用程序结束时更新数据?
- python - 当您将鼠标悬停在特定元素上时,如何选择特定元素?Selenium webdriver python;
- visual-studio - 按键时更改整个项目中的编码。VS 代码
- javascript - 我的 HTML Canvas 游戏存在性能问题
- jmeter - 从先前的响应中捕获 Json 值并传递给后续请求以动态计数变量