我在这个javascript
的创建视图中有一个工作级联下拉列表<script type="text/javascript">
$(document).ready(function () {
$("#GaCatId").change(function () {
var id = $(this).val();
$.getJSON("/Gallery/GetSubCategories/", { id: id },
function (data) {
var select = $("#GaSCatId");
select.empty();
select.append($('<option/>', {
value: 0,
text: "Select a Sub Category"
}));
$.each(data, function (index, data) {
select.append($('<option/>', {
value: data.Value,
text: data.Text
}));
});
});
});
});
我想编辑它,以便在Edit razor View上,它将根据数据库中的默认ID记录填充子列表。实际上,我正在寻找代码检查是否有ID
答案 0 :(得分:0)
您可以做的是检查首次选择的项目值是否有效,如果有效,则进行另一次ajax调用以获取第二次下拉列表的数据并加载它。 假设页面中存在2个下拉列表,
$(function(){
var gaCatId=$("#gaCatId").val();
if(gaCatId!="")
{
var items="";
$.getJSON("@Url.Action("GetSubCategories","Gallery")/"+gaCatId,
function(data){
$.each(data, function (index, item) {
items+="<option value='"+item.Value+"'>"+item.Text+"</option>";
});
$("#GaSCatId").html(items);
});
}
});
这应该有效。 但如果它是编辑屏幕,为什么不从动作方法本身加载它?我会这样做。
假设您正在编辑产品页面。所以你可能有像这样的视图模型
public class ProductVM
{
public int ID { set;get;}
public string Name { set;get;}
public List<SelectListItem> Categories { set;get;}
public List<SelectListItem> SubCategories { set;get;}
public int SelectedCategoryID { set;get;}
public int SelectedSubCategoryID { set;get;}
}
在您的编辑GET操作方法
中public ActinResult Edit(int id)
{
var vm=new ProductVM { ID=id};
Product product=repo.GetProductFromID(id);
vm.Name=product.Name;
vm.Categories=GetAvailableCategories();
vm.SelectedCategoryID=product.Category.ID;
vm.SubCategories=GetSubCategories(product.Category.ID);
vm.SelectedCategoryID=product.SubCategory.ID;
return View(vm);
}
假设GetAvailableCategories
和GetSubCategories
是两个返回SelectListItem
private List<SelectListItem> GetAvailableCategories()
{
//TO DO : read from repositary and build the list and return.
}
并且在您的视图中,我们的ProductVM类是强类型的
@model ProductVM
@using(Html.Beginform())
{
@Html.HiddenFor(x=>x.ID)
@Html.EditorFor(x=>x.Name)
@Html.DropDownListfor(x=>x.SelectedCategoryID ,
Model.Categories,"select")
@Html.DropDownListfor(x=>x.SelectedSubCategoryID,
Model.SubCategories,"select")
<input type="submit" />
}