2016-05-11 1 views
-1

私の見解は、このコントローラのメソッドMVC4 EF5 - LINQののSQLQuery後のAjax呼び出しエラー()

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

を呼び出して、次の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); 
     } 
    }); 

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

のように見え、このメソッドのデバッグ中にエラーが発生します

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! 
      } 
を使用する必要があります
関連する問題