EF多个下拉菜单

时间:2013-07-18 06:57:05

标签: c# asp.net-mvc-4 entity-framework-4.1

我希望在我的发票页面上有2个下拉列表,其模型如下:

    public class Invoice {
    [Key]
    public int InvoiceID { get; set; }
    public int MemberID { get; set; }
    public int AddressID { get; set; }

    public virtual Member Member { get; set; }
    public virtual MembersAddress  MembersAddress { get; set; }
    public virtual ICollection<InvoiceLineItem> InvoiceLineItems { get; set; }
}

虽然向导为我和代码自动生成了CRUD页面,但是当我从第一个Dropdown中选择Member Name时,我需要填充该成员的地址。 InvoiceController中Create()方法的代码是:

public ActionResult Create()
    {
        ViewBag.MemberID = new SelectList(db.Members, "MemberID", "FirstName");
        return View();
    }

和cshtml文件是:

@model MvcDemoApp.Models.Invoice

@{
  ViewBag.Title = "Create";
}

<h2>Create</h2>

@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)

<fieldset>
    <legend>Invoice</legend>

    <div class="editor-label">
        @Html.LabelFor(model => model.MemberID, "Member")
    </div>
    <div class="editor-field">
        @Html.DropDownList("MemberID", String.Empty)
        @Html.ValidationMessageFor(model => model.MemberID)
    </div>

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

    <p>
        <input type="submit" value="Create" />
    </p>
  </fieldset>
}

<div>
  @Html.ActionLink("Back to List", "Index")
</div>

@section Scripts {
   @Scripts.Render("~/bundles/jqueryval")
}

提前致谢。

1 个答案:

答案 0 :(得分:0)

据我了解,根据您想要生成的第一个下拉列表中的所选成员名称,您希望创建包含地址的下拉列表(或其他)。

如果要实现此目的,则必须使用局部视图。为您的firstdropdownlist提供一个ID 并在选择下拉列表时,使用jquery加载部分视图,您可以在其中加载地址。 例如,在您的视图中,您可以执行类似这样的操作

@Html.DropDownList("MemberID", String.Empty, new{id = "MembersName")
<div id="partialDiv"></div>

你可以使用jquery

填充部分div
<script>

    $("#MembersName").on("change", function() {
        var memberId = $(this).val();
        $.get('@Url.Action("GetMemberAddress", "Module")', { Id: memberId }, function(result) {
            $("#partialDiv").html(result);
        });

        //uncomment following section to check if the partial view is working properly
        /*.done(function() { alert("done"); })
            .fail(function() { alert("fail"); })
            .always(function() { alert("completed"); });*/

    });

</script>

你应该在你的控制器中添加一个名为GetMemberAddress的函数,当选择了dropdownlist项时,它会被调用,它是用上面脚本中的以下代码完成的。

$.get('@Url.Action("GetMemberAddress", "Module")', { Id: memberId }, 

我只是提供一种解决问题的技巧。你必须根据你想要的结果使用它

相关问题