2015-11-03 2 views
0

У меня есть пара каскадных выпадающих списков для типа & Sub Type. Они отлично работают при тестировании в режиме отладки локально, но после публикации в IIS список подтипов не заполняется и пуст. Я не получаю никаких сообщений об ошибках. Я пробовал это в IE9 & и Google Chrome V46, но получил тот же результат.Функция getJSON data не работает на IIS

Контроллеры:

public ViewResult StartRA() 
    { 
     var user = User.Identity.Name; 
     string userName = user.Substring(7); 
     var creator = Peopledb.People.FirstOrDefault(x => x.Username == userName); 
     var creatorContractId = (int)Session["LoggedContractId"]; 

     StartRiskAssessmentViewModel viewModel = new StartRiskAssessmentViewModel 
     { 
      RiskAssessment = new RiskAssessment(), 
      CreatorId = creator.PersonId, 
      CreatorContractId = creatorContractId, 
      Assessor = creator.FirstName + " " + creator.LastName, 
      Locations = Peopledb.Locations.Where(x => x.Dormant == false).OrderBy(x => x.LocationName).ToList(), 
      Types = db.Types.Where(x => x.Dormant == false).ToList(), 
     }; 
     return View(viewModel); 
    } 

    [AcceptVerbs(HttpVerbs.Get)] 
    public ActionResult SubTypeList(int typeId) 
    { 
     var subTypes = db.SubTypes.Where(x => x.Dormant == false && x.TypeId == typeId).ToList(); 

     if (HttpContext.Request.IsAjaxRequest()) 
      return Json(new SelectList(
          subTypes, 
          "SubTypeId", 
          "SubTypeName"), JsonRequestBehavior.AllowGet 
         ); 

     return View(subTypes); 
    } 

И вид Бритва:

@model RACentral.ViewModels.StartRiskAssessmentViewModel 

@{ 
ViewBag.Title = "Start RA"; 
} 

@using (Html.BeginForm()) 
{ 
@Html.AntiForgeryToken() 
<div class="form-horizontal"> 
    <hr /> 
    @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
    <h3 class="col-md-offset-2">Type</h3> 
    <div class="form-group"> 
     @Html.LabelFor(model => model.TypeId, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.DropDownListFor(model => model.TypeId, new SelectList(Model.Types, "TypeId", "TypeName", 0), "Please Select", new { @class = "form-control", @id = "Types" }) 
      @Html.ValidationMessageFor(model => model.TypeId, "", new { @class = "text-danger" }) 
     </div> 
    </div> 

    <div class="form-group"> 
     @Html.LabelFor(model => model.SubTypeId, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      <select id="SubTypes" name="SubTypeId" class="form-control"></select> 
      @Html.ValidationMessageFor(model => model.SubTypeId, "", new { @class = "text-danger" }) 
     </div> 
    </div> 

    <hr /> 
    @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
    <div class="form-group"> 
     <div class="col-md-offset-2 col-md-10"> 
      <input type="submit" value="Create" class="btn btn-primary" /> @Html.ActionLink("Cancel", "IndexLoggedIn", "Home", null, new { @Class = "btn btn-danger" }) 
     </div> 
    </div> 
</div> 
} 


@section Scripts { 
@Scripts.Render("~/bundles/jqueryval") 
<script type="text/javascript"> 
      $(function() { 
     $("#Types").change(function() { 
      $.getJSON('@Url.Action("SubTypeList","RiskAssessment")' { 
       var items = "<option>Please Select</option>"; 
       $.each(data, function (i, subtype) { 
        items += "<option value='" + subtype.Value + "'>" + subtype.Text + "</option>"; 
       }); 
       $("#SubTypes").html(items); 
      }); 
     }); 
</script> 
} 
+0

Вы бы хотели добавить свой звонок JSON? Вы уверены, что URL-адрес в JSON верен? Возможно, URL-адрес изменился. Обычно локально вы размещаете свой сайт на веб-сайте по умолчанию или в IIS Express, но это не тот случай, когда вы переходите к постановке или производству. Поэтому, если вы не используете Url.Action («контроллер», «действие»), чтобы получить URL-адрес, это, скорее всего, будет изменено. – Moe

+0

@Moe Ive отредактировал это сообщение, чтобы показать использование Url> action вместо этого, однако теперь он не работает локально либо? –

+0

Вы также удалили конфигурацию маршрута? – JamieD77

ответ

2

Вы можете сделать это с помощью $ .ajax и это может быть проще для вас, чтобы увидеть, что происходит

$(function() { 
    $("#Types").change(function() { 
     $.ajax({ 
      type: "get", // can change to post easily 
      data: {typeId: $(this).val()}, // or this.value 
      url: "@Url.Action("SubTypeList", "RiskAssessment")" // use url helper here 
     }).done(function (data) { 
      var items = "<option>Please Select</option>"; 
      $.each(data, function (i, subtype) { 
       items += "<option value='" + subtype.Value + "'>" + subtype.Text + "</option>"; 
      }); 
      $("#SubTypes").html(items); 
     }); 
    }); 
}); 

Использование хелпера url в вашем коде было правильным направлением, вам просто нужно было включить ваши параметры.

$.getJSON(
    "@Url.Action("SubTypeList", "RiskAssessment")", 
    { typeId: $(this).val() }) 
.done(function (data) { 
    var items = "<option>Please Select</option>"; 
    $.each(data, function (i, subtype) { 
     items += "<option value='" + subtype.Value + "'>" + subtype.Text + "</option>"; 
    }); 
    $("#SubTypes").html(items); 
}); 
+0

thats исправил проблему, спасибо очень –

Смежные вопросы