2015-11-03 58 views
0

我有一对类型为&子类型的级联下拉列表。当在本地进行调试模式下测试时,这些工作是完美的,但是一旦我发布到IIS,子类型列表不会填充并且为空。我没有得到任何错误消息。 我已经在IE9 &也试过Google Chrome V46,但得到了同样的结果。getJSON数据功能不能在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); 
    } 

而Razor视图是:

@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调用吗?你确定JSON中的URL是正确的吗?可能是URL已更改,通常在本地,您将在默认网站或IIS Express中托管您的站点,但当您进行分段或生产时,情况并非如此。所以,如果你不使用Url.Action(“controller”,“action”)来获取URL,那么这很可能会改变。 – Moe

+0

@我已编辑帖子以显示Url> action的用法,但是现在它在本地不起作用? –

+0

你是否也删除了你的路由配置? – JamieD77

回答

2

可以使用$就做到这一点,让你看到正在发生的事情可能更容易

$(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 helper是正确的方向,你只需要包含你的params。

$.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

这就解决了这个问题,非常感谢 –