2

我将 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 或其他复杂的实现. 有人可以用干净的代码建议我一步一步的方法吗?

4

2 回答 2

0

如果你想为你做脚手架,不幸的是这是不可能的,你不能简单地做到这一点。此外,您必须使用 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 调用和模型绑定的代码。我试图向您展示方式,因为我真的无法在此答案中发布所有这些。

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

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

于 2013-07-27T13:32:00.427 回答
0

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

于 2013-03-01T10:28:28.013 回答