在同一数据库列MVC4中保存多个文本框值
本文关键字:文本 保存 数据库 MVC4 | 更新日期: 2023-09-27 18:05:47
我试图使一个应用程序存储"成分"在数据库中的配方。一个食谱可以有多个食材,每个新食材将在新的文本框中输入。
我很困惑如何在我的控制器上配置这个以保存在数据库中。
e。文本框1:鸡肉,文本框2:土豆等。提交到一个Create() post ActionResult应该找到所有的文本框具有相同的类/值,并将其存储到同一列的配方数据库,然后可以检索时,"ViewRecipe"被调用。
一个代码片段示例将是伟大的!
我会使用外键。就像你说的,一个食谱有很多成分。在实体框架中,这将是:
public class Recipe
{
public int Id { get; set; }
public string Name { get; set; }
public string Category { get; set; }
// ...
public virtual ICollection<Recipe> Recipies { get; set; }
}
public class Ingredient
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Amount { get; set; }
public string Unit { get; set; }
public virtual Recipe Recipe { get; set; }
public int RecipeId { get; set; }
}
像这样,你可以有一个食谱"两个人的煎饼",材料像"2个鸡蛋","50g面粉","1/4杯酪乳",…
希望我正确理解了你的问题。
EDIT1:
我不建议将所有的成分存储在一个列中,这就是为什么我做了一个如何使用外键的例子。如何将其存储在控制器中(假设您正在创建一个新食谱)。它应该是这样的:
public ActionResult Post(string recipyName, string[] ingredients)
{
var recipy = new Recipy
{
Name = recipyName,
Ingredients = ingredients.Select(x => new Ingredient
{
Name = x,
Unit = "pcs.",
Amount = 1,
}).ToList(),
}
using (var context = new RecipyContext())
{
context.Recipes.Add(recipy);
context.SaveChanges();
}
return Ok();
}
我真的建议不要将成分存储在单个列中。它是不可扩展的,你必须做一些字符串技巧来把它们取出来。像这样,每个读你代码的人都很清楚。
EDIT2:我认为这个线程Asp.net razor列表项的文本框数组显示了如何很好地将这样的模型集成到视图中。