1

だから私はいくつかのajaxを行う方法を持っています:

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");
        }
    });  
}

ajax は正常に戻り、このコントローラー メソッドを呼び出します。

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;
    }

View または PartialView を返すと機能しないため、null を返していますが、とにかくそれらを返したくないと思います。私が望むのは、ビューデータを設定することだけです。

ビューデータを使用するコードを追加する前は、ajax はうまく機能していました。残念ながら、ajax 成功メソッドで新しい ViewData を使用しようとすると、次のエラーが表示されます。ページをロードすると、showAdvProd 関数が呼び出される前に「@Html.DropDownListFor...」を評価しようとしているように見えます。

// 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 を実行する関数が呼び出されますが、このエラーではページが読み込まれないため、明らかに ajax 関数は呼び出されず、コントローラー メソッドも呼び出されません。もちろん、ビューデータは認識されません...

ビューデータを使用して ajax を使用せずに、フォームの別の部分に同様にドロップダウン メニューを作成していますが、正常に動作します。したがって、ビューデータの使用方法ではなく、ajaxまたはコントローラーメソッドに問題があると思います。

助けてくれてありがとう!

4

1 に答える 1