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

时间:2015-08-01 10:27:05

标签: c# html asp.net-mvc-4 model-view-controller

我正在尝试创建一个应用程序,用于在数据库中存储配方的“成分”。一个配方可以有多种成分,这些成分将从每个新成分的新文本框中输入。

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

例如:textbox1:Chicken,Textbox2:potato等..提交后转到Create()帖子ActionResult,它应找到具有相同类/值的所有文本框并将其存储到同一列中的配方数据库然后可以在调用“ViewRecipe”时检索它。

代码段示例非常棒!

提前致谢!

1 个答案:

答案 0 :(得分:0)

我会使用外键。正如你所说,配方有多种成分。在实体框架中,这将是:

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; }
}

像这样你可以有一个配方&#39; Pancaces for 2&#39;配料如“鸡蛋”,“50克面粉”,“1/4杯酪乳&#39;”......

希望我能正确理解你的问题。

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 textbox array for list items展示了如何将这样的模型很好地集成到视图中。