2016-03-30 15 views
0

MVC modeline bağlanırken çalışmak için bağımlı bir liste almakla ilgili bir sorun yaşıyorum. Diğer çevrimiçi yanıtlarda statik listeler kullanıyorlar (işe alabiliyorum), ancak bunu gerçek verilerime bağlamak için son bir adımı atıyorum. Aşağıdaki kodu yaptığımda hiçbir şey olmuyor.MVC Bağımlı Liste modele bağlı (statik liste değil)

Tahminimce, listeyi ayarlamak için kullandığım javascript bölümünde ihtiyacım olan basit bir satır var ("ÇALIŞMA SAYFASI" uyarısı altında). Ya da yeni açılan listeyle açılır listeyi güncellemenin bir yolu olmalıdır (her yöntemi tek tek basmak yerine).

Denetleyici:

public class EMPLOYEEsController : Controller 
{ 
private ApplicationDbContext db = new ApplicationDbContext(); 
public ActionResult Create() 
{ 
    ViewBag.STATEID = new SelectList(db.STATEs, "STATEID", "STATENAME"); 
    ViewBag.CITYID = new SelectList(db.CITYs, "CITYID", "CITYNAME"); 
    return View(); 
} 

    [HttpGet] 
    public ActionResult UpdateCity(string id) 
    { 
     SelectList CityList = new SelectList(db.CITYs.Where(x => x.STATEID.Equals(id)), "CITYID", "CITYNAME"); 
     return Json(CityList, JsonRequestBehavior.AllowGet); 
    } 
} 

Görünüm:

@model myproj.Models.EMPLOYEE 

@{ 
ViewBag.Title = "Create"; 
Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

<h2>Create</h2> 

@using (Html.BeginForm()) 
{ 
@Html.AntiForgeryToken() 

<script type="text/javascript" src="/scripts/jquery-1.10.2.js"></script> 
<script type="text/javascript"> 
    $(function() { 
     $('#STATEID').change(function() { 
      $.ajax({ 
       url: '@Url.Action("UpdateCity")', 
       type: 'GET', 
       dataType: 'json', 
       cache: false, 
       data: { id: $(this).val() }, 
       success: function (CityList) { 
        alert('WORKS SO FAR'); 
        var citySelect = $('#CITYID'); 
        citySelect.empty(); 
        $.each(CityList, function (index, locations) { 
         citySelect.append(
          $('<option/>') 
           .attr('value', CityList.CITYID) 
           .text(CityList.CITYNAME) 
          ); 
        }); 
       }, 
       error: function() { alert('ERROR'); } 
      }); 
     }); 
    }); 
</script> 

<div class="form-horizontal"> 
<h4>EMPLOYEE</h4> 
<hr /> 
@Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
<div class="form-group"> 
    @Html.LabelFor(model => model.EMPLOYEENAME, htmlAttributes: new { @class = "control-label col-md-2" }) 
    <div class="col-md-10"> 
     @Html.EditorFor(model => model.EMPLOYEENAME, new { htmlAttributes = new { @class = "form-control" } }) 
     @Html.ValidationMessageFor(model => model.EMPLOYEENAME, "", new { @class = "text-danger" }) 
    </div> 
</div> 

<div class="form-group"> 
    @Html.LabelFor(model => model.STATEID, htmlAttributes: new { @class = "control-label col-md-2" }) 
    <div class="col-md-10"> 
     @Html.DropDownListFor(model => model.STATEID, (IEnumerable<SelectListItem>)ViewBag.STATEs, "Select State", new { @class = "form-control" }) 
     @Html.ValidationMessageFor(model => model.STATEID, "", new { @class = "text-danger" }) 
    </div> 
</div> 

<div class="form-group"> 
    @Html.LabelFor(model => model.CITYID, htmlAttributes: new { @class = "control-label col-md-2" }) 
    <div class="col-md-10"> 
     @Html.DropDownListFor(model => model.CITYID, (IEnumerable<SelectListItem>)ViewBag.CITYs, "Select City", new { @class = "form-control" }) 
     @Html.ValidationMessageFor(model => model.CITYID, "", new { @class = "text-danger" }) 
    </div> 
</div> 

<div class="form-group"> 
    <div class="col-md-offset-2 col-md-10"> 
     <input type="submit" value="Create" class="btn btn-default" /> 
    </div> 
</div> 
</div> 
} 

<div> 
@Html.ActionLink("Back to List", "Index") 
</div> 

@section Scripts { 
@Scripts.Render("~/bundles/jqueryval") 
} 
+0

$ .each (CityList'te, işlev (dizin, konumlar) {console.log (CityList, index, konumlar);} 'neyi gözlemliyorsunuz? – Jasen

+0

My CityList konsolda güzel görünüyor. [Object, Object, Nesne, Nesne] Uygun Metin ve Değerle 4 detaylı Nesneye sahiptir. –

+0

ViewBag.STATEID = ... 've' ViewBag.CITYID = ... 'yazım hatalarıdır. ViewBag.STATEs = ... 've' ViewBag.CITYs =… 'dır, aksi halde başka sorunlarınız vardır. –

cevap

1

CityList şehirlerin sizin listesidir. Ancak, CityList.CityID'u almaya çalışıyorsunuz. İstediğiniz, $.each numaralı telefonun CityId ve CityName adreslerinin geri aramada ikinci parametre olarak sağlamasıdır.

Sen ile bunu elde etmek mümkün olmalıdır:

    $.each(CityList, function (index, locationSelectItem) { 
         citySelect.append(
          $('<option/>') 
           .attr('value', locationSelectItem.Text) 
           .text(locationSelectItem.Value) 
          ); 
        }); 

mantıklı iken StateId olması ve görünüm tarafından kullanılacak beri, bir List dönmek için UpdateCity değiştirmelisiniz SelectList edilecek CityId

+0

teşekkürler. Büyük yakalamak. ama hala çalışmıyor. Benim ikinci listemi güncellemek gibi görünmüyor. Daha fazla test yaptım ve tüm .each bölümünü yorumladım, sadece citySelect.empty() öğesini bıraktım ve bu eski listeyi temizlemiyor. –

+0

"alert()' inizden hemen sonra, console.log (CityList) 'i kurabilir ve neye geri döndüğünüzü görebilirsiniz? –

+0

Geri döndüm: [Nesne, Nesne, Nesne, Nesne] Uygun Metin ve Değer ile 4 ayrıntılı Nesneye sahiptir. –