MVC 3 3表单上的模型 - 配方,成分,配方成分

时间:2012-01-25 14:47:54

标签: asp.net-mvc asp.net-mvc-3 razor

在过去的几个星期里,我一直在研究我可能做的所有事情,似乎已经找到了如何使用多个模型创建表格并保存到数据库的方法。

我正在尝试在单个表单上创建一个或多个配料添加到配方中。我已经创建了所有生成的模板crud视图。我对这个方向感到困惑,并且正在讨论使用MVC Controls Toolkit,因为我需要能够使用jquery和ajax在表单上添加另一个成分。现在,我主要担心的是能够将Recipe,Ingredient和RecipeIngredient模型绑定到表格上。

设置我的视图和控制器方法将非常感谢任何帮助!在此先感谢:)

这是我的模型类,视图模型,控制器方法。 不幸的是,我没有足够的声誉来发布图像,但这里是我的数据库图表的链接。 http://i44.tinypic.com/xp1tog.jpg。 我希望这是足够的细节,但如果需要更多,请告诉我。

    public ActionResult CreateFullRecipe()
    {
        var recipeViewModel = new RecipeViewModel();
        //Im getting a RecipeIngredients null error as well below..
        recipeViewModel.RecipeIngredients.Add(new RecipeIngredient());
        return View(recipeViewModel);
    }

public class Recipe
{
    public int RecipeID { get; set; }
    public string RecipeName { get; set; }
    public string Description { get; set; }
    public int? PrepTime { get; set; }
    public int? CookTime { get; set; }
    public string ImageURL { get; set; }

    public virtual ICollection<RecipeTag> RecipeTags { get; set; }
    public virtual ICollection<Rating> Ratings { get; set; }
    public virtual ICollection<RecipeStep> RecipeSteps { get; set; }
    public virtual ICollection<RecipeIngredient> RecipeIngredients { get; set; }

}

public class Ingredient
{

    public int IngredientID { get; set; }
    public string IngredientName { get; set; }

    public virtual ICollection<RecipeIngredient> RecipeIngredients { get; set; }
}

    public class RecipeIngredient
{
    public int RecipeIngredientID { get; set; }
    public string IngredientDesc { get; set; }
    public string Amount { get; set; }
    public int RecipeID { get; set; }
    public int? IngredientID { get; set; }

    public virtual Recipe Recipe { get; set; }
    public virtual Ingredient Ingredient { get; set; }
}

public class RecipeViewModel
{
    public Recipe Recipe { get; set; }
    public Ingredient Ingredient { get; set; }
    public ICollection<RecipeIngredient> RecipeIngredients { get; set; }
}

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
    <legend>Recipe</legend>

    <div class="editor-label">
        @Html.LabelFor(model => model.Recipe.RecipeName)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Recipe.RecipeName)
        @Html.ValidationMessageFor(model => model.Recipe.RecipeName)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.Ingredient.IngredientName)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Ingredient.IngredientName)
        @Html.ValidationMessageFor(model => model.Ingredient.IngredientName)
    </div>



    <ul>
    @foreach (var recipeingredient in Model.RecipeIngredients)
    {
        <li>
            @recipeingredient.Ingredient.IngredientName
       </li>
    }
    </ul>

2 个答案:

答案 0 :(得分:0)

您不需要任何其他工具包/工具就可以执行此操作。您拥有MVC和JQuery所需的一切。下面是一篇关于模型绑定的精彩文章。它解释了如何绑定类列表。我建议阅读整篇文章。如果是我,我会开始简单,只需绑定其中一个类,然后添加一个视图模型,然后是一个类/实体的集合

Model Binding

答案 1 :(得分:0)

ViewModel模式不适用于多个模型。您应该只在视图中使用一个强类型模型(可能包含您想要使用的多个模型),然后在控制器中使用您想要应用CRUD的数据填充该视图模型。