在同一数据库列MVC4中保存多个文本框值

本文关键字:文本 保存 数据库 MVC4 | 更新日期: 2023-09-27 18:05:47

我试图使一个应用程序存储"成分"在数据库中的配方。一个食谱可以有多个食材,每个新食材将在新的文本框中输入。

我很困惑如何在我的控制器上配置这个以保存在数据库中。

e。文本框1:鸡肉,文本框2:土豆等。提交到一个Create() post ActionResult应该找到所有的文本框具有相同的类/值,并将其存储到同一列的配方数据库,然后可以检索时,"ViewRecipe"被调用。

一个代码片段示例将是伟大的!

在同一数据库列MVC4中保存多个文本框值

我会使用外键。就像你说的,一个食谱有很多成分。在实体框架中,这将是:

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列表项的文本框数组显示了如何很好地将这样的模型集成到视图中。