2013-03-26 4 views
0

У меня есть дата, в которой данные (из базы данных) заполняются с помощью ajax, я также хочу, чтобы новый tablerow с «Детали» отображал более подробную информацию о выбранном элементе, но таблица позволяет только данные из базы данных. Вот видmvc - jQuery ajax datatable actionlink

<script language="javascript" type="text/javascript"> 

    $(document).ready(function() { 

     $('#myDataTable').dataTable({ 
      "bProcessing": false, 
      "bServerSide": true, 
      "sAjaxSource": 'AjaxDataProvider', 
      "aoColumns": [ 
            { 
             "sName": "ID", 


            }, 
            { "sName": "Student_naam" }, 
            { "sName": "klas" }, 
            { "sName": "adres" }, 
            { "sName": "woonplaats" }, 
            { "sName": "details" } 
      ] 

     }) 
    }); 

    </script> 

и у меня есть таблица под с некоторым кодом, включая это:

<td> 
      @Html.ActionLink("Details", "Index", "StudentGegevens", new {id = item.studentnr}) 
     </td> 

Вот мой контроллер

public ActionResult AjaxDataProvider(JQueryDataTableParamModel param) 
    { 
     var allStudents = hoi.STUDENT.ToList(); 
     IEnumerable<STUDENT> filteredStudents; 
     if (!string.IsNullOrEmpty(param.sSearch)) 
     { 
      //Used if particulare columns are filtered 
      var roepnaamFilter = Convert.ToString(Request["sSearch_1"]); 
      var adresFilter = Convert.ToString(Request["sSearch_2"]); 
      var woonplaatsFilter = Convert.ToString(Request["sSearch_3"]); 
      var klasFilter = Convert.ToString(Request["sSearch_4"]); 

      //Optionally check whether the columns are searchable at all 
      var isNameSearchable = Convert.ToBoolean(Request["bSearchable_1"]); 
      var isAddressSearchable = Convert.ToBoolean(Request["bSearchable_2"]); 
      var isTownSearchable = Convert.ToBoolean(Request["bSearchable_3"]); 
      var isClassSearchable = Convert.ToBoolean(Request["bSearchable_4"]); 

      filteredStudents = hoi.STUDENT.ToList() 
       .Where(c => isNameSearchable && c.roepnaam.ToLower().Contains(param.sSearch.ToLower()) 
          || 
          isAddressSearchable && c.adres.ToLower().Contains(param.sSearch.ToLower()) 
          || 
          isTownSearchable && c.woonplaats.ToLower().Contains(param.sSearch.ToLower()) 
          || 
          isClassSearchable && c.klas.ToLower().Contains(param.sSearch.ToLower())); 
     } 
     else 
     { 
      filteredStudents = allStudents; 
     } 

     var isNameSortable = Convert.ToBoolean(Request["bSortable_1"]); 
     var isAddressSortable = Convert.ToBoolean(Request["bSortable_2"]); 
     var isTownSortable = Convert.ToBoolean(Request["bSortable_3"]); 
     var isClassSortable = Convert.ToBoolean(Request["bSortable_4"]); 
     var sortColumnIndex = Convert.ToInt32(Request["iSortCol_0"]); 
     Func<STUDENT, string> orderingFunction = (c => sortColumnIndex == 1 && isNameSortable ? c.roepnaam : 
                 sortColumnIndex == 2 && isClassSortable ? c.klas : 
                 sortColumnIndex == 3 && isAddressSortable ? c.adres : 
                 sortColumnIndex == 4 && isTownSortable ? c.woonplaats : 
                 ""); 

     var sortDirection = Request["sSortDir_0"]; // asc or desc 
     if (sortDirection == "asc") 
     { 
      filteredStudents = filteredStudents.OrderBy(orderingFunction); 
     } 
     else 
     { 
      filteredStudents = filteredStudents.OrderByDescending(orderingFunction); 
     } 

     var displayedStudents = filteredStudents.Skip(param.iDisplayStart).Take(param.iDisplayLength); 
     var result = from c in displayedStudents select new[] { Convert.ToString(c.studentnr), c.roepnaam, c.klas, c.adres, c.woonplaats, "Here is the thing I dont know what to fill in" }; 
     return Json(new 
     { 
      sEcho = param.sEcho, 
      iTotalRecords = allStudents.Count(), 
      iTotalDisplayRecords = filteredStudents.Count(), 
      aaData = result 
     }, 
        JsonRequestBehavior.AllowGet); 
    } 

И некоторые общественные Интс

public class JQueryDataTableParamModel 
    { 
     public string sEcho { get; set; } 

     public string sSearch { get; set; } 

     public int iDisplayLength { get; set; } 

     public int iDisplayStart { get; set; } 

     public int iColumns { get; set; } 

     public int iSortingCols { get; set; } 

     public string sColumns { get; set; } 


    } 

Я хотел бы k теперь то, что я должен поставить в var Result.

все отображается правильно, кроме ссылки, я пробовал что-то вроде Url.Action, но без везения, он не дает ссылку назад.

ответ

0

К сожалению, я тупица, я вспомнил, я мог бы поставить строку в контроллер с HTML, и было бы преобразовать его в HTML ->.

var result = from c in displayedStudents select new[] { Convert.ToString(c.studentnr), c.roepnaam, c.klas, c.adres, c.woonplaats, "<a style='font-family:arial' href='" + "../StudentGegevens/index/" + c.studentnr + "' />Details</a>"};

лол, не самый яркий человек, я, я прошу прощения за этот вопрос.

1

Не очень уверен, какие данные детали вы хотите показать, но вы можете проверить способ: fnrender or mRender, ниже - образец.

"aoColumns": [ 
            { 
             "sName": "ID", 


            }, 
            { "sName": "Student_naam" }, 
            { "sName": "klas" }, 
            { "sName": "adres" }, 
            { "sName": "woonplaats" }, 
            { "sName": "details", 
    "mRender": function (data, type, full) { 
     return '<a href="'+data+'">Download</a>'; 
     } } 
      ] 
+0

Спасибо, но это не совсем то, что я считаю, дело в том, что детали не что-то в моей базе данных, у меня есть другая страница (details.cshtml), специально созданная для показа информации, и я хочу ссылку на эту страницу например «ученик/детали/12434 (номер случайного ученика)», но ссылка не показана. – Conceptual

+0

Вы использовали mRender для создания ссылки? Я думаю, он может удовлетворить ваши требования, потому что я использую этот код для добавления ссылки, и он работает хорошо. – OQJF

+0

Я попытался использовать это, но дело в том, что в моем контроллере мне нужно указать строку «result», что следующая таблица выглядит следующим образом: var result = from c in displayStudents select new [] {Convert.ToString (c .studentnr), c.roepnaam, c.klas, c.adres, c.woonplaats, «Вот что я не знаю, что заполнить»}; – Conceptual