在JavaScript中接收C#枚举并将其通过Ajax传递给模型

时间:2018-08-14 19:36:34

标签: c# ajax asp.net-mvc

在我的代码中,我需要接收一个字符串,将其转换为C#枚举,然后将该枚举传递给我的模型。该代码在for循环内(未显示)。

 var thisDwm = document.getElementById("dwm_" + i).value;       
            var urlDwm = "/KnowledgeTransfer/GetDailyWeeklyMonthlyEnum";
            var response
            $.ajax({
                type: 'GET',
                url: urlDwm,
                data: { 'caseFromJS': thisDwm },
                contentType: 'application/json',
                success: function (thisResponse) {
                    response = thisResponse;
                }
            })
            model.MainResponsibilities[i].DailyWeeklyMonthly = response;

当前,ajax命中我的C#控制器并返回正确的枚举。但是,当我查看JavaScript断点时,“响应”仍未定义且未设置。如何设置对可以传递给模型的C#枚举对象的响应?是否需要进行某些解析?看来我什么都没收到。

无济于事的是,类型,数据,contentType,成功和thisResponse在Chrome中都显示为“未定义参考错误”。但是,即使这些其他方法也显示了此错误,Ajax仍然至少在其他地方仍然有效。

谢谢您的帮助。

编辑:以下是我的控制器方法:

public ObjectModel.Enums.DailyWeeklyMonthly GetDailyWeeklyMonthlyEnum(string caseFromJS)
        {
            switch (caseFromJS){

                case "Daily":
                    return ObjectModel.Enums.DailyWeeklyMonthly.Daily;
                case "Weekly":
                   return ObjectModel.Enums.DailyWeeklyMonthly.Weekly;
                case "Monthly":
                   return ObjectModel.Enums.DailyWeeklyMonthly.Monthly;
                case "Yearly":
                    return ObjectModel.Enums.DailyWeeklyMonthly.Yearly;
                default:
                    throw new Exception("problem with dailyWeeklyMonthly in KnowledgeTransferController");

1 个答案:

答案 0 :(得分:2)

使用共享的代码,如果尝试在定义变量之前使用response变量,则会得到 未定义响应 错误。在您共享的代码段中,您仅在ajax调用的success回调方法中对其进行初始化。

请记住,ajax是异步。当JavaScript框架执行此行model.MainResponsibilities[i].DailyWeeklyMonthly = response;(在成功回调范围之外)时,ajax调用可能仍在执行/等待服务器的响应,这意味着未将任何内容设置为response,这表明表示变量response未初始化!

仅在successdone回调中访问有关ajax调用的响应。

$.ajax({
         type: 'GET',
         url: urlDwm,
         data: { 'caseFromJS': thisDwm },
         contentType: 'application/json',
         success: function (thisResponse) {
              // safe to use thisResponse in this callback method scope
              console.log(thisResponse);

              // Assuming model.MainResponsibilities[i] exist
              model.MainResponsibilities[i].DailyWeeklyMonthly = thisResponse;
         }
})