2017-08-29 12 views
0

私はJQuery DataTablesとAJAXを使用しています。プライマリキーで接続されているセカンダリテーブルからフィールドを取得するのが難しいです。私が見ることができるのは主キーだけです。この場合はconcern_idです。Datatables AJAX結合テーブルからフィールドを取得

モデル:質問

public int question_id { get; set; } 
    public int concern_id { get; set; } 
    public string question_text { get; set; } 
    public string question_answer { get; set; } 

モデル:懸念

public int concern_id { get; set; } 
    public string concern_desc { get; set; } 

私はconcern_descを表示できるようにしたいと思います。データ型でAJAXを使用しないと、必要なフィールドを簡単に取得できます。

例:

@Html.DisplayNameFor(model => model.concern.concern_desc) 

コントローラー:

public JsonResult GetQuestionRecord() 
    { 
     bool proxyCreation = db.Configuration.ProxyCreationEnabled; 
     try 
     { 
      db.Configuration.ProxyCreationEnabled = false; 
      var list = (from q in db.questions 
         join c in db.concerns on q.concern_id equals c.concern_id 
         select q).ToList(); 

      return Json(list, JsonRequestBehavior.AllowGet); 
     } 
     catch (Exception ex) 
     { 
      Response.StatusCode = (int)HttpStatusCode.BadRequest; 
      return Json(ex.Message); 
     } 
     finally 
     { 

      db.Configuration.ProxyCreationEnabled = proxyCreation; 
     } 

    } 

ビュー:

<table id="DataTable" class="display" style="width:100%"> 
<thead> 
    <tr> 
     <th>ConcernID</th> 
     <th>QuestionText</th> 
    </tr> 
</thead> 
<tbody></tbody> 

はJavaScript:

$(document).ready(function() { 
    GetQuestionRecord(); 
}); 

var GetQuestionRecord = function() { 
    $.ajax({ 
     type: "Get", 
     url: '@Url.Action("GetQuestionRecord","questions")', 
     success: function (response) { 
      BindDataTable(response); 
     } 
    }); 
}  
var BindDataTable = function (response) { 
    $("#DataTable").DataTable({ 
     "aaData": response, 
     "aoColumns": [ 
      { "mData": "concern_id" }, 
      { "mData": "question_text" }, 
     ] 
    }); 
} 

"concern_desc"を表示するために、 "mData:concern_id"をどのように変更しますか?私が試した:

{ "mData": "concern_desc" } 

そして

{ "mData": "concern.concern_desc" } 
+0

復帰したいプロパティを含む匿名オブジェクト - '{concern_desc = c.concern_desc、QUESTION_TEXT = q.question_text}新しいを選択し'してからスクリプト '{ "MDATA" で: "concern_desc"} ' –

+0

@StephenMueckeありがとうございました。 – Jay

答えて

2

ステップ1:このようにコントローラであなたのLINQクエリを変更します。

 var list = (from q in db.questions 
 
         join c in db.concerns on q.concern_id equals c.concern_id 
 
         select new 
 
         { 
 
          question_id = q.question_id, 
 
          concern_id = q.concern_id, 
 
          question_text = q.question_text, 
 
          question_answer = q.question_aswer, 
 
          concern_desc = c.concern_desc 
 
         }).ToList();

ステップ2:あなたのBindDataTable JSコードに変更してください。

var BindDataTable = function (response) { 
 
    $("#DataTable").DataTable({ 
 
     "aaData": response, 
 
     "aoColumns": [ 
 
      { "mData": "concern_id" }, 
 
      { "mData": "question_text" }, 
 
      { "mData": "concern_desc" } 
 
     ] 
 
    });

関連する問題