현재 페이지에 두 개의 드롭 다운 목록 상자가 있습니다. 사용자가 페이지를 입력하고 약 12 개의 항목이로드되면 첫 번째 항목이 표시됩니다. 다른 드롭 다운 목록은 첫 번째 항목에서 선택이 이루어질 때까지 스타일을 사용하여 숨겨집니다. 선택이 이루어지면 첫 번째 ddl의 변경 이벤트가 내 컨트롤러에 대한 ajax 호출을 시작하여 두 번째 ddl을 채우는 데 필요한 데이터를 가져옵니다. 아약스 호출이 올바른 데이터를 얻고 있으므로 여기를 통해 모든 것이 잘 수행됩니다.채워져 있어야하는 DropDownList를 찾을 수 없습니다.
두 번째 ddl을 채울 때 문제가 발생합니다. Json에서 돌아 오면 jQuery는 내 두 번째 ddl을 찾을 수 없습니다. 내가 얻은 것은 반환 된 데이터를 dataBind하려고 시도 할 때 가리키는 "정의되지 않은"오류입니다.
다음은 코드입니다.
보기
<table width="100%">
<tr>
<td class="adminTitle">
@Html.NopLabelFor(model => model.SpecificationAttribute):
</td>
<td class="adminData">
@Html.DropDownListFor(model => model.SpecificationAttribute, new SelectList(Model.SpecificationAttributes, "Id", "Name"), "Select a Specification Attribute")
</td>
</tr>
<tr>
<td class="adminTitle">
<div class="SAOptions" style="display:none">
@Html.NopLabelFor(model => model.SpecificationAttributeOption):
</div>
</td>
<td class="adminData">
<div class="SAOptions" style="display:none">
@Html.DropDownListFor(model => model.SpecificationAttributeOptions, Enumerable.Empty<SelectListItem>())
</div>
</td>
</tr>
</table>
<script type="text/javascript">
$("#SpecificationAttribute").change(function() {
var specificationAttributeId = $("#@Html.FieldIdFor(model => model.SpecificationAttribute)").val();
//User selected one of the Specification Attributes
if (specificationAttributeId != "") {
//Show the Specification Attribute Options
$(".SAOptions").show();
//Load the now showing dropdownlist
$.getJSON('@Url.Action("GetSpecificationAttributeOptions", "Reports")', { specificationAttributeId: specificationAttributeId }, function (data) {
//**************************
//This is not finding my ddl
//**************************
var ddl = $("#SpecificationAttributeOptions").data("tDropDownList");
alert(ddl != null);
if (data.length > 0) {
//Bind data and reload
//********************
//Breaks here
//********************
ddl.dataBind(data);
ddl.reload();
}
});
}
//User selected "Select a Specification Option" for some reason, so hide everything
else {
$(".SAOptions").hide();
$("#divOptions").hide();
}
});
컨트롤러
public ActionResult ProductBySpecificationAttribute()
{
if (!_permissionService.Authorize(StandardPermissionProvider.ManageReports))
return AccessDeniedView();
var model = new SpecificationAttributeReportListModel();
var specificationAttributes = _specificationAttributeService.GetSpecificationAttributes();
var specificationAttributesModel = PrepareSpecificationAttributeModel(specificationAttributes);
model.SpecificationAttributes = specificationAttributesModel;
//Return Model data
return View(model);
}
public JsonResult GetSpecificationAttributeOptions(int specificationAttributeId)
{
var specificationAttributeOptions = _specificationAttributeService.GetSpecificationAttributeOptionsBySpecificationAttribute(specificationAttributeId);
var specificationAttributeOptionsModel = PrepareSpecificationAttributeOptionsModel(specificationAttributeOptions);
var returnData = new SelectList(specificationAttributeOptionsModel, "Id", "Name");
return Json(returnData, JsonRequestBehavior.AllowGet);
}
나는 간단 뭔가 느낌이 있지만, 나는 아직 그것을 생각하지 않았습니다. 다른 ddl을 구현하면 작동하는지 알 수 있습니다. 그러나 나는 모든 것이 함께 흐르기를 원하므로이 ddl을 사용합니다 (선택이 아닌, 전체적으로 일관성을 위해서).
도움을 주시면 감사하겠습니다.
친절한 안부, 차드 존슨
실제로 항목을 넣을 때 실제로 도움이되지 않았습니다. 나는 origianlly 생각했지만 그것은 내가 가진 다른 구현했다. – IyaTaisho