0

我想在我的发票页面上有 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 页面,但是当我从第一个下拉列表中选择成员名称时,我只需要填充该成员的地址。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")
}

提前致谢。

4

1 回答 1

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在您的控制器中调用的函数,该函数在选择下拉列表项时被调用,它是通过上面脚本中的以下代码完成的。

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

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

于 2013-07-18T09:54:58.420 回答