2016-08-10 6 views
0

Meine Ansicht Modell wie folgt aussieht:assign Select basierend auf einem anderen

public IList<TeamCategory> TeamCategories { get; set; } 
public IEnumerable<SelectListItem> TeamCategoriesList { get; set; } 
public IList<CategoryInput> CategoryInputs { get; set; } 

public class CategoryInput 
{ 
    public string CategoryName { get; set; } 
    public IEnumerable<SelectListItem> VenueList { get; set; } 
} 

Abfrage:

foreach (var teamCategory in model.TeamCategories) 
      { 
       var categoryInput = new CategoryInput() 
       { 
        CategoryName = teamCategory.Name, 
        VenueList = teamCategory.Venues.Select(x => new SelectListItem() 
        { 
         Value = x.Id, 
         Text = x.Address 
        }), 
       }; 

       model.CategoryInputs.Add(categoryInput); 
      } 

Ausblick:

@Html.DropDownList("TeamCategory", Model.TeamCategoriesList, new {@id = "categorieslist"}) 

@Html.DropDownList("Venue", new List<SelectListItem>(), new {@id = "venuelist" }) 

So beginnt es mit teamcategories Liste wird bevölkert aus, und eine leere Veranstaltungsliste. Wenn ich die Kategorie ändere, möchte ich, dass die Veranstaltungsliste auf die mit dieser Kategorie verknüpfte Liste aktualisiert wird y wie aus der Abfrage ersichtlich ist.

$('#categorieslist').change(function() { 
      AssignVenues(); 
     }); 

function AssignVenues() { 
       var category = $('#categorieslist').val(); 

      } 

Antwort

1

Sie müssen hören die change Ereignis auf dem TeamCategory select-Element, erhalten die gewählte Option Wert und machen:

ich den Ereignis-Listener, aber nach, dass ich bei einem Verlust begonnen haben einen Ajax-Anruf zu Ihrem Server, wo Sie die ausgewählte Team-Kategorie-ID erhalten, Orte für diese Kategorie-ID erhalten und das Ergebnis im JSON-Format zurückgeben.

@section Scripts 
{ 
<script> 
    $(function(){ 

    $("#categorieslist").change(function(){ 

     var teamCategoryId=$(this).val(); 
     $("#venuelist").html(""); 
     var venues=""; 

     $.getJSON('@Url.Action("GetVenues","Home")/'+teamCategoryId,function(data){ 
      $.each(data,function(a,b){ 
       venues+="<option value='"+b.Value+"'>"+b.Text+"</option>"; 
      }); 
      $("#venuelist").html(venues); 
     }); 

    }); 

    }); 
</script> 
} 

Vorausgesetzt Sie haben eine GetVenues Methode in Ihrem HomeController haben die

public ActionResult GetVenues(int id) 
{ 
    var list=new List<SelectListItem>(); 
    // I am hard coding 2 venues. 
    // You may replace it with your real data for the id passed in. 

    list.Add(new SelectListItem { Value="1", Text="Ann Arbor"}); 
    list.Add(new SelectListItem { Value="2", Text="Detroit"}); 

    return Json(list,JsonRequestBehaviour.AllowGet); 
} 
+0

fantastische Liste SelectListItem des zurückgibt! Es funktioniert fast 100%, das Problem, dem ich begegne, ist die Übergabe des Parameters teamcategoryId. Mit dem Code wie es ist nur versucht, nach einer URL zu suchen, die wie folgt aussieht: http: // localhost: 8050/mein-tennis-club/161/team-getvenuesanother% 20one (wo 'eine andere' ist der Kategoriename). Wenn ich diesen Teil ablege, funktioniert es perfekt. Wie kann ich diesen Parameter übergeben? Ich habe versucht die URL.action zu @ Url.Action ("GetVenues", "Home", neue {ID = teamcaegoryID}), aber natürlich wird es nicht erkennen, die Variable in Rasierer – BMills

+0

'@ Url.Action (" GetVenues " , "Home", neu {id = teamcaegoryID}) wird nicht funktionieren, da die Methode Url.Action auf dem Server vor dem Änderungsereignis im Javascript ausgeführt wird. Also müssen Sie den JavaScript-Variablenwert manuell an das Ergebnis von '@ Url.Action (" GetVenues "," Home ")" – Shyju

+0

richtig anfügen, ich habe es funktioniert, indem ich es in folgendes ändere: $ .getJSON ('@ Url. Action ("GetVenues", "Team") "+"? CategoryId = "+ category ... vielleicht könntest du deine Antwort ändern. Vielen Dank Shyju, ich bin jetzt auf dem Weg, Ajax zu verstehen und es nutzen zu können ! :-) – BMills

Verwandte Themen