2017-03-15 3 views
0

Ich habe zwei Dropdown-Listen aus meiner SichtDropdown-Listen (ASP.NET MVC)

Für die erste Drop-Down-Liste habe ich diesen Code in Aussicht:

@Html.DropDownListFor(model => model.VacancyId, ViewBag.Teams as SelectList,new { @class = "greeting" }) 

Und dies in Controller-

SelectList teams = new SelectList(db.Vacancy, "VacancyId", "VacancyName"); 
     ViewBag.Teams = teams; 
     return View(); 

Und hier ist das Modell

public partial class Vacancy 
{ 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] 
    public Vacancy() 
    { 
     this.Interwiers = new HashSet<Interwier>(); 
     this.InvitationMails = new HashSet<InvitationMail>(); 
     this.Interviews = new HashSet<Interview>(); 
     this.MassLinks = new HashSet<MassLink>(); 
    } 

    public int VacancyId { get; set; } 
    [Display(Name = "Вакансия")] 
    public string VacancyName { get; set; } 
    public Nullable<int> CompanyID { get; set; } 

    public virtual Company Company { get; set; } 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
    public virtual ICollection<Interwier> Interwiers { get; set; } 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
    public virtual ICollection<InvitationMail> InvitationMails { get; set; } 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
    public virtual ICollection<Interview> Interviews { get; set; } 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
    public virtual ICollection<MassLink> MassLinks { get; set; } 
} 

}

Ich muss zwei Dropdown-Listen festlegen. In einer wähle ich die Firma aus, in der zweiten werde ich offene Stellen sehen, die mit dieser Firma verbunden sind. Wie macht man das?

Danke für Hilfe.

+0

Suchen Sie nach "abhängiges Dropdown" oder "kaskadierendes Dropdown" – jmoerdyk

+0

Sie werden als kaskadierende Dropdown-Listen bezeichnet - beziehen Sie sich auf [diese Frage/Antwort] (http://stackoverflow.com/questions/28627421/better-way-to-load-) 2-Dropdown-in-mvc/28640420 # 28640420) für ein Beispiel. Auch [diese DotNetFiddle] (https://dotnetfiddle.net/1bPZym) für eine vollständige Implementierung (und verwenden Sie keine Datenmodelle in Ihrer Ansicht, vor allem beim Bearbeiten - verwenden Sie [Ansicht Modelle] (http://stackoverflow.com/questions/ 11064316/what-is-viewmodel-in-mvc)) –

+3

Mögliches Duplikat von [Verbindung zwischen zwei Dropdown-Listen mvc 4] (http://stackoverflow.com/questions/12249335/connecting-between-two-dropdownlist-mvc-4) –

Antwort

1

Sie können AJAX verwenden. Ich denke nicht, dass du es über Razor schaffen kannst.

+0

Stimmen Sie dieser Aussage zu. Ich hatte ein ähnliches Problem und fand heraus, dass es viel einfacher war, mit Standard-HTML-Auswahl und Optionen mit Javascript umzugehen als die HTML-Helfer, die mit Rasiermesser kommen. Wenn Sie wirklich Rasiereransichten verwenden möchten, können Sie eine Teilansicht versuchen, die nur den Dropdown-Helfer enthält, der von AJAX abgerufen wird. –

+1

Die Verwendung von Rasiermesser hat damit nichts zu tun (Rasierer ist nur zum Erzeugen von HTML) –

0

Ich gebe Ihnen ein Beispiel in MVC 5. Fetching Mehrwertsteuersatz für die Mehrwertsteuer-Code,

Typoskript/JS:

 function FetchVATDetails() { 

    let ddlSender = "#ddlVATCode"; 
    let url = "/ExactSalesOrders/GetVATDetails"; 
    let ddlVatPercentage = "#ddlVATPercentage"; 
    let failureFunction =() => { 
     $(ddlVatPercentage).html(""); 
     $(ddlVatPercentage).append(
      $('<option></option>').html("- No VAT Percentage -")); 
    }; 

    let id = $(ddlSender).val(); 
    if (id != "" && id != null) { 
     $.ajax({ 
      url: url, 
      type: "GET", 
      dataType: "JSON", 
      data: { id: id }, 
      success(data) { 
       if (data === false) { 
        failureFunction(); 
       } else { 
        $(ddlVatPercentage).html(""); 
        $.each(data.VATPercentages, 
         (i, percentage) => { 
          $(ddlVatPercentage).append(
           $('<option></option>').val(percentage.Percentage).html(percentage.Percentage)); 
         }); 
        $(ddlVatPercentage).change(); 
       } 
      } 
     }); 
    } else { 
     failureFunction(); 
    } 
} 

Controller:

public ActionResult GetVATDetails(string id) 
     { 
      var vat = ExactService.SelectObjectByCode<VATCode>(id); 
      vat.VATPercentages = ExactService.SelectObjects<VatPercentage>().Where(x => x.VATCodeID == vat.ID).ToList(); 
      return vat != null ? Json(vat, JsonRequestBehavior.AllowGet) : Json(false, JsonRequestBehavior.AllowGet); 
     } 

Prost

0

Sie können es einfach tun, indem Sie J-query Ajax verwenden. Wenn Sie den ersten Drop geladen haben down-Werte, fügen Sie eine OnChange-Methode für dieses Feld hinzu, während Sie bei einer Änderung einen Ajax-Aufruf ausführen und Ihre ersten Dropdown-Werte übergeben und die zugehörigen Werte in db abrufen. Stellen Sie sicher, dass Sie die Feldwerte in db korrekt zugeordnet haben.