Jquery 无法找到需要填充的DropDownList
我目前在一个页面上有两个下拉列表框。当用户进入页面并加载大约12个条目时,第一个条目是可见的。另一个dropdownlist使用样式隐藏,直到在第一个dropdownlist中进行选择。在做出选择后,第一个ddl上的change事件触发对我的控制器的ajax调用,以获取填充第二个ddl所需的数据。ajax调用正在获取正确的数据,因此在这里一切都很好 当我尝试填充第二个ddl时,问题就出现了。从Json返回时,jQuery无法找到我的第二个ddl。我得到的只是一个未定义的错误,它指向我试图对返回的数据进行数据绑定的时候 下面是代码 看法 我觉得这很简单,但我还没弄明白。我知道如果我实现一个不同的ddl,它就会工作。然而,我希望所有的东西都能流到一起,所以我使用这个ddl不是出于选择,而是为了整体的一致性 任何帮助都将不胜感激 最亲切的问候, 查德·约翰逊Jquery 无法找到需要填充的DropDownList,jquery,asp.net-mvc-3,razor,Jquery,Asp.net Mvc 3,Razor,我目前在一个页面上有两个下拉列表框。当用户进入页面并加载大约12个条目时,第一个条目是可见的。另一个dropdownlist使用样式隐藏,直到在第一个dropdownlist中进行选择。在做出选择后,第一个ddl上的change事件触发对我的控制器的ajax调用,以获取填充第二个ddl所需的数据。ajax调用正在获取正确的数据,因此在这里一切都很好 当我尝试填充第二个ddl时,问题就出现了。从Json返回时,jQuery无法找到我的第二个ddl。我得到的只是一个未定义的错误,它指向我试图对返回的
var ddl = $("#SpecificationAttributeOptions").data("tDropDownList");
该行正在尝试获取附加到DropDownList的tDropDownList数据。它不会返回您的ddl,它可能返回未定义的,因为没有数据附加到您的ddl
更多信息请参见此处:因此我提出了自己的解决方案。我将次要ddl的HTML.DropDownList替换为一个普通的。这使我能够以不同的方式构建dropdownlist。以下是我所做的 看法 控制器
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);
}
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);
}
/// <summary>
/// Used to load dropdownlist for SpecificationAttributeOptions
/// </summary>
/// <param name="specificationAttributeId">SpecificationAttribute Identifier</param>
/// <returns>Json data to build dropdownlist</returns>
public JsonResult GetSpecificationAttributeOptions(int specificationAttributeId)
{
//Get the SpecificationAttributeOptions for this SpecificationAttributeId
var specificationAttributeOptions = _specificationAttributeService.GetSpecificationAttributeOptionsBySpecificationAttribute(specificationAttributeId);
//Load data into SpecificationAttributeOptionModel
var specificationAttributeOptionsModel = PrepareSpecificationAttributeOptionsModel(specificationAttributeOptions);
//Pluck Id and Name from data
var returnData = (from sao in specificationAttributeOptionsModel select new { id = sao.Id, name = sao.Name }).ToList();
//Return specific data
return Json(returnData, JsonRequestBehavior.AllowGet);
}
谢谢大家的回答和帮助。我很感激。希望这能帮助其他可能遇到同样问题的人。当我把一个项目放进去时,这实际上没有任何帮助。我原以为是的,但那是我对它的不同实现。
<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">
<select id="SpecificationAttributeOptions"></select>
</div>
</td>
</tr>
</table>
<script type="text/javascript">
//Change event for SpecificationAttribute
$("#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) {
var ddl = $("#SpecificationAttributeOptions");
if (data.length > 0) {
//Clear data from dropdownlist
ddl.html('');
//Bind dropdownlist
var elements = "";
$.each(data, function (id, option) {
elements += '<option value="' + option.id + '">' + option.name + '</option>'
});
ddl.append(elements);
}
});
}
//User selected "Select a Specification Option" for some reason, so hide everything
else {
$(".SAOptions").hide();
}
});
</script>
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);
}
/// <summary>
/// Used to load dropdownlist for SpecificationAttributeOptions
/// </summary>
/// <param name="specificationAttributeId">SpecificationAttribute Identifier</param>
/// <returns>Json data to build dropdownlist</returns>
public JsonResult GetSpecificationAttributeOptions(int specificationAttributeId)
{
//Get the SpecificationAttributeOptions for this SpecificationAttributeId
var specificationAttributeOptions = _specificationAttributeService.GetSpecificationAttributeOptionsBySpecificationAttribute(specificationAttributeId);
//Load data into SpecificationAttributeOptionModel
var specificationAttributeOptionsModel = PrepareSpecificationAttributeOptionsModel(specificationAttributeOptions);
//Pluck Id and Name from data
var returnData = (from sao in specificationAttributeOptionsModel select new { id = sao.Id, name = sao.Name }).ToList();
//Return specific data
return Json(returnData, JsonRequestBehavior.AllowGet);
}