所以我的方法中,我做了一些AJAX:有型的无ViewData的项目“的IEnumerable <SelectListItem>”具有关键“print_ad_option_id”
function prodChange() {
console.log(this.value);
// ajax
var url = '@Url.Action("GetAdvProdList", "Contract")' + '?prod_id=' + this.value;
$.ajax({
url: url,
type: 'GET',
success: showAdvProd,
error: function() {
console.log("FAILSHAKUREHKGAHH");
}
});
}
成功阿贾克斯的回报,并呼吁该控制器的方法。
public ActionResult GetAdvProdList(int prod_id) { // product id
// get advertising products for this product
OutlookMediaEntities1 db = new OutlookMediaEntities1();
var advsList = from printAdOption in db.print_ad_option
where printAdOption.print_product_id == prod_id
select printAdOption;
List<SelectListItem> adv_list = new List<SelectListItem>(); // list of ads
List<print_ad_option> advs = advsList.ToList(); // list from db
foreach (print_ad_option av in advs)
{
SelectListItem temp_item = new SelectListItem();
temp_item.Text = av.name;
temp_item.Value = av.print_ad_option_id.ToString();
adv_list.Add(temp_item);
}
ViewData["advproducts"] = new SelectList((IEnumerable<SelectListItem>)adv_list.ToList(), "Value", "Text");
return null;
}
我返回null,因为,如果我返回查看或PartialView不工作,我不认为我希望它返回反正那些东西。我只想要设置viewdata的东西。
在添加代码以使用视图数据之前,ajax运行良好。不幸的是,当我尝试在ajax成功方法中使用新的ViewData时,出现以下错误: “没有类型为'IEnumerable'的具有'print_ad_option_id'键的ViewData项” 事情是当我收到此错误时我第一次加载页面,所以它似乎是试图评估“@ Html.DropDownListFor ......”的showAdvProd函数被调用之前:
// called when the ajax returns a list of adv prods in a viewdata
function showAdvProd() {
// add drop down
$("#drdn1").append('@Html.DropDownListFor(m => m.print_ad_option_id, ViewData["advproducts"] as SelectList)');
}
,做阿贾克斯函数被调用时,选定项目从一个(不同的)下拉菜单,但这个错误的页面甚至没有加载,所以显然ajax函数从来没有被调用,因此控制器方法从不调用。所以当然它不会识别viewdata ...
我同样在我的窗体的另一部分创建一个下拉菜单,使用viewdata但没有ajax,它工作正常。所以我认为我的ajax或我的控制器方法有问题,而不是我如何使用viewdata。
非常感谢您的帮助!
谢谢,这使我走上了正确的轨道,我得到了它的工作。 – maus