2010-07-08 85 views
0

在視圖模型:更新下拉值

SelectSafetyContacts = new SelectList(subcontractRepository.GetContacts(Subcontract.company_id), "contact_id", "contact_name", Subcontract.safety_contact); 

在Repository:

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函數,以便將來如果對此選擇進行更新,它只會在一個位置?

回答

0

就是這麼做的:

$('#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 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); 
    } 
0

您可以使用AJAX實現此目的。當公司變更時,向服務器發送請求,傳遞新的公司ID以獲取關聯的聯繫人。要做到這一點,你需要一個控制器動作返回一個包含聯繫人的局部視圖下拉列表:

型號:

public class SafetyContactsViewModel 
{ 
    public int? SelectedContactId { get; set; } 
    public IEnumerable<SelectListItem> Contacts { get; set; } 
} 

控制器:

public ActionResult Contacts(int? companyId) 
{ 
    var contacts = new SafetyContactsViewModel 
    { 
     Contacts = new SelectList(
      subcontractRepository.GetContacts(companyId), 
      "contact_id", 
      "contact_name" 
     ) 
    }; 
    return PartialView(contacts); 
} 

然後你Contacts.ascx部分將包含降下拉列表:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<SafetyContactsViewModel>" %> 
<%= Html.DropDownListFor(x => x.SelectedContactId, Model.Contacts, "** Select Contact **") %> 

然後你可以附上一個.change()事件處理程序的公司下拉這將調用控制器動作:

$(function() { 
    $('#the_id_of_the_companies_drop_down').change(function() { 
     $('#id_of_a_div_that_contains_the_contacts_drop_down') 
      .load('/home/contacts', { companyId: $(this).val() }); 
    }); 
});