【问题标题】:ASP.NET MVC 3 EF Code First - Master Details CRUDASP.NET MVC 3 EF 代码优先 - 掌握详细信息 CRUD
【发布时间】:2013-02-15 19:31:38
【问题描述】:

我将 ASP.NET MVC 3 EF Code First 与 Razor + SQLserver 一起使用,并希望通过 CRUD 操作实现 Master Details 场景(如 Order、Orderlines)。我遇到过一些在线示例,例如http://hasibulhaque.com/index.php/2011/master-detail-crud-operations-ef-asp-net-mvc-3/,但它们在很大程度上依赖于 JQuery 或其他复杂的实现。有人可以建议我使用干净的代码逐步进行吗?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 ef-code-first


    【解决方案1】:

    asp.net 站点上有很好的教程。 我建议你切换到 mvc4 学习。 这是一个链接: http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4

    【讨论】:

    • 我刚刚查看了本教程,但它不是真正的 Master-Details CRUD(尽管外观相似)。我可以使用 MVC-3 轻松实现这种过滤,但我担心的是主详细信息中的 CRUD(如发票:发票标题和发票项目详细信息)无论如何谢谢
    • 一点也不)。我以为你想要一个好的 codefirst 示例,然后你可以根据该示例编写更复杂的东西
    【解决方案2】:

    如果你想为你做脚手架,很遗憾,这是不可能的,你不能做到这一点简单地。此外,您必须使用 jquery 和 ajax 来实现您想要的。

    我认为对你来说最好和最简单的方法是你有一个创建表单的视图,并在它的底部放置一个字段集来为它分配 FormFields。

    对于字段集,您应该有两个局部视图:一个用于创建,另一个用于编辑。创建的局部视图应该是这样的:

    @model myPrj.Models.Form_FormFieldInfo
    
    @{ 
        var index = Guid.NewGuid().ToString(); 
        string ln = (string)ViewBag.ListName;
        string hn = ln + ".Index";
    }
    
    <tr>
        <td>        
            <input type="hidden" name="@hn" value="@index" />
            @Html.LabelFor(model => model.FormFieldID)
        </td>
        <td>
            @Html.DropDownList(ln + "[" + index + "].FormFieldID", 
                new SelectList(new myPrj.Models.DbContext().FormFields, "ID", "FieldName"))
        </td>        
        <td>
            <input type="button" onclick="$(this).parent().parent().remove();" 
                value="Remove" />
        </td>
    </tr>
    

    通过ajaxly在create place view中调用这个局部视图,你可以为每个标签渲染一些元素。每行元素包含一个标签、一个包含标签的 DropDownList 和一个删除按钮,用于简单地删除创建的元素。

    在创建位置视图中,您有一个裸表,其中将包含您通过部分视图创建的那些元素:

    <fieldset>
        <legend>Form and FormFields</legend>
        @Html.ValidationMessageFor(model => model.FormFields)</label>
        <table id="tblFields"></table>                                        
        <input type="button" id="btnAddTag" value="Add new Field"/>
        <img id="imgSpinnerl" src="~/Images/indicator-blue.gif" style="display:none;" />
    </fieldset>
    

    你有以下脚本来为每个标签创建一行元素:

    $(document).ready(function () {
        $("#btnAddField").click(function () {
            $.ajax({
                url: "/Controller/GetFormFieldRow/FormFields",
                type: 'GET', dataType: 'json',
                success: function (data, textStatus, jqXHR) {
                    $("#tblFields").append(jqXHR.responseText);
                },
                error: function (jqXHR, textStatus, errorThrown) {
                    $("#tblFields").append(jqXHR.responseText);
                },
                beforeSend: function () { $("#imgSpinnerl").show(); },
                complete: function () { $("#imgSpinnerl").hide(); }
            });
        });
    });
    

    动作方法GetFormFieldRow如下:

    public PartialViewResult GetFormFieldRow(string id = "")
    {            
        ViewBag.ListName = id;
        return PartialView("_FormFieldPartial");
    }
    

    您已经完成了创建...您问题的整个解决方案有许多用于视图、部分视图、控制器、ajax 调用和模型绑定的代码。我试图向您展示方式,因为我真的无法在此答案中发布所有这些。

    Here 是完整的信息和操作方法。

    希望这个答案对您有用并为您指明方向。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-11
      • 2017-03-21
      • 1970-01-01
      • 2019-03-29
      • 1970-01-01
      相关资源
      最近更新 更多