我希望在我的发票页面上有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")
}
提前致谢。
答案 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 },
我只是提供一种解决问题的技巧。你必须根据你想要的结果使用它