2015-05-03 3 views
0

У меня есть две вебгриды, отображаемые на двух вкладках. для страны - один для страны и один для города и два частичных мнения. Мое намерение было, если я выбираю страну в webgrid первой вкладки, соответствующие города должны отображаться на второй вкладке. Я использую jquery ajax calls и загружаюсь в тег Div второй вкладки. Rite теперь проблема, с которой я столкнулся, - я не могу передать первичный ключ («id») выбранной строки в первой сетке. Как я могу передать значение. Следующим является код, который я использовал. Теперь обратитесь в jquery $(this).val(). нульКак получить значение из выбранной строки webgrid с помощью jquery

.webGrid { 
     margin: 4px; 
     border-collapse: collapse; 
     width: 500px; 
     background-color: #B4CFC3; 
    } 

    .header { 
     background-color: #C1D4E6; 
     font-weight: bold; 
     color: #FFF; 
    } 

    .webGrid th, .webGrid td { 
     border: 1px solid #C0C0C0; 
     padding: 5px; 
    } 

    .alt { 
     background-color: #E4E9F5; 
     color: #000; 
    } 

    .gridHead a:hover { 
     text-decoration: underline; 
    } 

    .description { 
     width: auto; 
    } 

    .select { 
     background-color: #71857C; 
    } 
</style> 

@{ 
    var grid1 = new WebGrid(Model,fieldNamePrefix: "g2", pageFieldName: "p2", canPage: true, rowsPerPage: 5, 
    selectionFieldName: "selectedRow", ajaxUpdateContainerId: "gridSecondContent"); 
    grid1.Pager(WebGridPagerModes.NextPrevious);} 
<div id="gridContent"> 
    @grid.GetHtml(tableStyle: "webGrid", 
       headerStyle: "header", 
       alternatingRowStyle: "alt", 
       selectedRowStyle: "select", 
       columns: grid.Columns(
       grid.Column("id", "id"), 
       grid.Column("countryname", format: (item) => item.GetSelectLink(item.countryname)) 
</div> 

Jquery код

<script> 
     function getDepartmentTable(selectedEmpCode) { 
      $.ajax({ 
       // Get Department PartialView 
       url: "/Newgridtab/_citygrid", 
       type: 'GET', 
       data: { id: selectedEmpCode }, 
       success: function (data) { 
        jQuery("#tabs-2").html(data); 
       }, 
       error: function (error) { 
        alert("Error: Please try again."); 
       } 
      }); 
     } 
    </script> 
    <script> 
     jQuery(document).ready(function() { 
      jQuery("#gridContent").hover(function (index) { 
       var selectedEmpCode = $(this).val(); 
       getDepartmentTable(selectedEmpCode); 
      }); 


     }); 
    </script> 

UPDATE

Если я жёстко var selectedEmpCode к значению первичного ключа т.е. здесь 'идентификатор', то все работает нормально, я получаю значение POST HTTP действия r для второй webgrid, и отображается правильно. Таким образом, проблема теперь значение Val я не получаю ..

UPDATE

я сделал, как $(this).parent().find('id').text(); но не повезло на всех

оказанной HTML является

<!DOCTYPE html> 

<html> 
<head> 
    <meta name="viewport" content="width=device-width" /> 
    <title>Index</title> 
    <link href="/Content/themes/base/jquery-ui.css" rel="stylesheet" /> 
    <script src="/Scripts/jquery-1.7.1.js"></script> 
    <script src="/Scripts/jquery-ui-1.8.20.js"></script> 
    <script src="/Scripts/jquery.unobtrusive-ajax.js"></script> 
    <script type="text/javascript"> 
     $(function() { 
      $("#tabs").tabs(); 
     }); 
    </script> 
</head> 
<body> 
    <div id="tabs"> 

     <ul> 
      <li><a href="#tabs-1">Tab Header 1</a></li> 
      <li><a href="#tabs-2">Tab Header 2</a></li> 

     </ul> 

     <div id="tabs-1"> 
      <style type="text/css"> 
    .webGrid { 
     margin: 4px; 
     border-collapse: collapse; 
     width: 500px; 
     background-color: #B4CFC3; 
    } 

    .header { 
     background-color: #C1D4E6; 
     font-weight: bold; 
     color: #FFF; 
    } 

    .webGrid th, .webGrid td { 
     border: 1px solid #C0C0C0; 
     padding: 5px; 
    } 

    .alt { 
     background-color: #E4E9F5; 
     color: #000; 
    } 

    .gridHead a:hover { 
     text-decoration: underline; 
    } 

    .description { 
     width: auto; 
    } 

    .select { 
     background-color: #71857C; 
    } 
</style> 



<div id="gridContent"> 
      <script type="text/javascript"> 
     (function($) { 
      $.fn.swhgLoad = function(url, containerId, callback) { 
       url = url + (url.indexOf('?') == -1 ? '?' : '&') + '__swhg=' + new Date().getTime(); 

       $('<div/>').load(url + ' ' + containerId, function(data, status, xhr) { 
        $(containerId).replaceWith($(this).html()); 
        if (typeof(callback) === 'function') { 
         callback.apply(this, arguments); 
        } 
       }); 
       return this; 
      } 

      $(function() { 
       $('table[data-swhgajax="true"],span[data-swhgajax="true"]').each(function() { 
        var self = $(this); 
        var containerId = '#' + self.data('swhgcontainer'); 
        var callback = getFunction(self.data('swhgcallback')); 

        $(containerId).parent().delegate(containerId + ' a[data-swhglnk="true"]', 'click', function() { 
         $(containerId).swhgLoad($(this).attr('href'), containerId, callback); 
         return false; 
        }); 
       }) 
      }); 

      function getFunction(code, argNames) { 
       argNames = argNames || []; 
       var fn = window, parts = (code || "").split("."); 
       while (fn && parts.length) { 
        fn = fn[parts.shift()]; 
       } 
       if (typeof (fn) === "function") { 
        return fn; 
       } 
       argNames.push(code); 
       return Function.constructor.apply(null, argNames); 
      } 
     })(jQuery); 
     </script> 
    <table class="webGrid" data-swhgajax="true" data-swhgcontainer="gridContent" data-swhgcallback=""> 
    <thead> 
     <tr class="header"> 
      <th scope="col"> 
<a data-swhglnk="true" href="/?g1sort=id&amp;g1sortdir=ASC">id</a>   </th> 
      <th scope="col"> 
<a data-swhglnk="true" href="/?g1sort=countryname&amp;g1sortdir=ASC">countryname</a>   </th> 
      <th scope="col"> 
<a data-swhglnk="true" href="/?g1sort=continent&amp;g1sortdir=ASC">Description</a>   </th> 
      <th scope="col"> 
<a data-swhglnk="true" href="/?g1sort=language&amp;g1sortdir=ASC">language</a>   </th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td>1</td> 
      <td><a data-swhglnk="true" href="/?g1selectedRow=1">India</a></td> 
      <td class="continent">Asia</td> 
      <td>Hindi</td> 
     </tr> 
     <tr class="alt"> 
      <td>2</td> 
      <td><a data-swhglnk="true" href="/?g1selectedRow=2">China</a></td> 
      <td class="continent">Asia</td> 
      <td>Mandarin</td> 
     </tr> 
     <tr> 
      <td>3</td> 
      <td><a data-swhglnk="true" href="/?g1selectedRow=3">England</a></td> 
      <td class="continent">Europe</td> 
      <td>English</td> 
     </tr> 
     <tr class="alt"> 
      <td>4</td> 
      <td><a data-swhglnk="true" href="/?g1selectedRow=4">USA</a></td> 
      <td class="continent">America</td> 
      <td>English</td> 
     </tr> 
    </tbody> 
    </table> 





</div> 
<script> 
     function getDepartmentTable(selectedEmpCode) { 
      $.ajax({ 
       // Get Department PartialView 
       url: "/Newgridtab/_citygrid", 
       type: 'GET', 
       data: { id: selectedEmpCode }, 
       success: function (data) { 
        jQuery("#tabs-2").html(data); 
       }, 
       error: function (error) { 
        alert("Error: Please try again."); 
       } 
      }); 
     } 
    </script> 
    <script> 
     jQuery(document).ready(function() { 
      jQuery("#gridContent").hover(function (index) { 
       //var selectedEmpCode = $(this).find("#id").text(); 
       getDepartmentTable(4); 
      }); 


     }); 
    </script> 



     </div> 

     <div id="tabs-2"> 

     </div> 



    </div> 



</body> 
</html> 
+0

фактический HTML-код сетки был бы более полезен, чем выражение '@ grid.GetHtml'. –

+0

@ Roamer-1888, если кто-то может дать метод получения значения значения столбца таблицы, например $ (this) .find ("# id"). Text(); то мы можем закрыть этот вопрос – peter

+0

@ Roamer-1888 i обновил свой вопрос – peter

ответ

1

Проблема вы пытаясь получить значение val() $ (this).

$ (это) будет div, на который вы наведете, а не значение id.

Попробуйте заменить эту строку:

var selectedEmpCode = $(this).val(); 

с этим: var selectedEmpCode = $(this).find("#id").text(); (или .val() если оказанная HTML является входным -> который я думаю, что его не)

+0

Я еще не получаю val. Почему это #id, здесь id - это имя столбца, которое содержит первичный ключ – peter

+0

вместо # мне нужно использовать что-либо или простой идентификатор. Это имя столбца, а не значение идентификатора DIV – peter

+0

Мне понравилось $ (this) .parent() .find ('ID') текст(). но не повезло – peter

1
<script> 
     jQuery(document).ready(function() { 
      jQuery("#gridContent a").hover(function (index) { 
       var selectedEmpCode = $(this).text(); 
       getDepartmentTable(selectedEmpCode); 
      }); 


     }); 
    </script> 
+0

Это сработало отлично – peter

+0

отлично, лучше использовать «#gridContent tr a», чтобы вы не активировали функцию, зависая в заголовке таблицы. –

+0

Я не могу понять, почему это сработало бы, если бы вы сказали выше, что «если i hardcode var selectedEmpCode = 4 или любое существующее значение, я получаю желаемый результат». В этом ответе '$ (this) .text()' будет именем страны, а не целым числом. –

Смежные вопросы