2016-05-11 30 views
-1

我的觀點看起來像MVC4 EF5 - )的Linq類SqlQuery(後Ajax調用錯誤

<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();之後,alert函數被調用並顯示「error:[object Object]」...但Filter()方法也會將適量的過濾實體返回給我的控制器方法。部分視圖很快顯示,然後重新加載頁面。我錯過了什麼?

回答

0

此查詢適用於所有數據類型:

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