Q:

assign selectlist based on another

My view model looks like this:
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; }
}

Query:
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);
            }

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

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

So it starts off with teamcategories list being populated, and an empty venue list, then when I change the category, I'd like the venue list to be updated to the list associated with that category as can be seen from the query.
I've started the event listener, but after that I'm at a loss:  
$('#categorieslist').change(function() {
            AssignVenues();
        });

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

            }

A:

You need to listen to the change event on the TeamCategory select element,get the selected option value and make an ajax call to your server where you will receive the selected team category id ,get venues for that category id and return the result in JSON format.
@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>
}

Assuming you have a GetVenues method in your HomeController which returns a list of SelectListItem's
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);
}

