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

私が理解している限り、生成したい最初のドロップダウンリストから選択したメンバー名に基づいて、アドレスを含むドロップダウンリスト(または何でも)を作成したいと考えています。

これを実現したい場合は、部分ビューを使用する必要があります。最初のドロップダウン リストに 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 に答える