Jquery 更新下拉列表值
在ViewModel中:Jquery 更新下拉列表值,jquery,asp.net-mvc,asp.net-mvc-2,drop-down-menu,Jquery,Asp.net Mvc,Asp.net Mvc 2,Drop Down Menu,在ViewModel中: SelectSafetyContacts = new SelectList(subcontractRepository.GetContacts(Subcontract.company_id), "contact_id", "contact_name", Subcontract.safety_contact); 在存储库中: public IQueryable<contact> GetContacts(Guid id) { retur
SelectSafetyContacts = new SelectList(subcontractRepository.GetContacts(Subcontract.company_id), "contact_id", "contact_name", Subcontract.safety_contact);
在存储库中:
public IQueryable<contact> GetContacts(Guid id)
{
return
db.companies
.Where(c => c.active_status == true)
.Where(c => c.primary_company == id || c.company_id == id)
.SelectMany(ct => ct.contacts).Where(ct => ct.active_status == true);
}
形式如下:
<%= Html.DropDownList("safety_contact", Model.SelectSafetyContacts, "** Select Contact **") %>
这非常有效,除非他们改变了公司的形式。然后需要更改联系人以匹配新公司。我假设我可以通过jQuery以某种方式实现这一点,但我不确定如何实现。我是否可以引用存储库中的GetContacts函数,以便将来如果对此选择进行更新,它将只在一个位置?您可以使用AJAX实现这一点。当公司发生变化时,向服务器发送一个请求,传递新的公司id以获取相关的联系人。为此,需要控制器操作返回包含联系人下拉列表的局部视图:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<SafetyContactsViewModel>" %>
<%= Html.DropDownListFor(x => x.SelectedContactId, Model.Contacts, "** Select Contact **") %>
型号:
public class SafetyContactsViewModel
{
public int? SelectedContactId { get; set; }
public IEnumerable<SelectListItem> Contacts { get; set; }
}
然后,Contacts.ascx部分将包含下拉列表:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<SafetyContactsViewModel>" %>
<%= Html.DropDownListFor(x => x.SelectedContactId, Model.Contacts, "** Select Contact **") %>
是这样做的:
$('#company').change(function () {
var company = $(this)[0].value.toString();
$.getJSON('<%= ResolveUrl("~/Subcontracts/CompanyContacts/") %>' + company, null, function (data) {
$('.contact').empty().append("<option value=''>**Select Contact**</option>");
$.each(data, function (index, optionData) {
$('.contact').append("<option value='" + optionData.contact_id + "'>" + optionData.contact_name + "</option>");
});
});
});
在我的控制器中:
public ActionResult Contacts(int? companyId)
{
var contacts = new SafetyContactsViewModel
{
Contacts = new SelectList(
subcontractRepository.GetContacts(companyId),
"contact_id",
"contact_name"
)
};
return PartialView(contacts);
}
public ActionResult CompanyContacts(string id)
{
Guid companyId = new Guid(id);
IEnumerable<contact> companycontacts = subcontractRepository.GetContacts(companyId);
var contacts = (from c in companycontacts select new { contact_id = c.contact_id, contact_name = c.contact_name });
return Json(contacts, JsonRequestBehavior.AllowGet);
}