【问题标题】:MVC4 EF5 - Ajax call error after Linq SqlQuery()MVC4 EF5 - Linq SqlQuery() 之后的 Ajax 调用错误
【发布时间】:2016-05-11 11:48:09
【问题描述】:

我的观点看起来像

<form onsubmit="return Filter();" class="my-form">
  <input type="submit" value="Filter!" />
</form>

使用以下 ajax 调用

    $.ajax({
        url: "/Report/Filter/",
        cache: false,
        type: "POST",
        dataType: "html"
        data: { filterOption: selectedFilterOption, filterOptionValue: selectedFilterValue },
        success: function (data) {
            $('#filterResultDiv').html(data);
        },
        error: function (reponse) {
            alert("error : " + reponse);
        }
    });

调用这个控制器方法

        [HttpPost]
        public ActionResult Filter(string filterOption, string filterOptionValue)
        {
            var filterCol = (FilterColumnName)System.Enum.Parse(typeof(FilterColumnName), filterOption);
            var singleFilter = new SingleFilter(filterCol, filterOptionValue);
            var entries = singleFilter.Filter();
            ...
            return PartialView("\\Places\\PartialReport", reportVM);
        }

调试此方法时出现错误

 public List<FilteredRow> Filter()
        {
            List<FilteredRow> result = new List<FilteredRow>();
            var ent = new Entities();

            var query = "SELECT * FROM V_Data WHERE " + this.GetFilterColumnName() + "= @p0";
            var dbObjects = ent.V_Data.SqlQuery(query, this.Value).ToList(); //<---- the ajax error function gets called after this line :(

            foreach (var obj in dbObjects)
            {
                var entry = new FilteredRow(obj);
                result.Add(entry);
            }

            return result;
        }

所以在var dbObjects = ent.V_Data.SqlQuery(query, this.Value).ToList(); 之后,警报函数被调用并显示“错误:[object Object]”...但 Filter() 方法也将正确数量的过滤实体返回给我的控制器方法。部分视图很快就会显示出来,然后页面会重新加载。我错过了什么?

【问题讨论】:

    标签: c# jquery ajax linq asp.net-mvc-4


    【解决方案1】:

    此查询适用于所有数据类型:

    var valueParam = new SqlParameter("@p0", this.Value);
    var dbObjects = ent.V_Data.SqlQuery("SELECT * FROM V_Data WHERE " + this.GetFilterColumnName() + " = @p0", valueParam);
    

    在javascript中我必须使用

    function Filter() {
          $.ajax({
                    url: '@Url.Action("Filter")',
                    cache: false,
                    type: "GET",
                    data: { filterOption: selectedFilterOption, filterOptionValue: selectedFilterValue },
                    success: function (data) {
                        $('#filterResultDiv').html(data);                
                    },
                    error: function (reponse) {
                        alert("error : " + reponse.toString());
                    }
                });
                return false; //<- this avoids the page refresh!
              }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多