После того, как элемент jquery table.load() html станет undefined

Я переписываю сообщение, чтобы сделать его понятным

У меня есть HomeController, который имеет следующие действия

public ActionResult About()
    {
        MapDetailsRepository repMapDetail = new MapDetailsRepository("name=ge");
        YearRepository repYear = new YearRepository("name=ge");


        SuperMapModel smM = new SuperMapModel();
        smM.saVM = new StudentAssessmentViewModel();

        MapDetailResultSet mapDetailResultSet = repMapDetail.GetMapDetails(53);

        smM.saVM.mapDetails = mapDetailResultSet.mapDetails.ToList();
        smM.saVM.results = mapDetailResultSet.results.ToList();
        smM.saVM.students = mapDetailResultSet.students.ToList();

        smM.scM = new SearchControlViewModel();
        smM.scM.YearList = new SelectList(repYear.GetAll(), "yearID", "year");


        return View(smM);        }

public ActionResult DisplaySearchResults(string searchText) {
         MapDetailsRepository repMapDetail = new MapDetailsRepository("name=ge");
         SuperMapModel smM = new SuperMapModel();
        smM.saVM = new StudentAssessmentViewModel();

        MapDetailResultSet mapDetailResultSet = repMapDetail.GetMapDetails(22);

        smM.saVM.mapDetails = mapDetailResultSet.mapDetails.ToList();
        smM.saVM.results = mapDetailResultSet.results.ToList();
        smM.saVM.students = mapDetailResultSet.students.ToList();

        return PartialView("~/Views/Maps/_MapDetailsList.cshtml", smM.saVM);
}

SuperMapModel - это Super Class, который имеет 2 модели просмотра - scM для частичного контроля панели поиска - saVM для частичного управления MapDetailList

Загрузка на страницу SuperMapModel передается в представление, которое передает соответствующие модели каждому частичному управлению

<div>
@Html.Partial("_SearchPanel", Model.scM)
</div>
<div class="row">
<div class="col-md-12 table-responsive" >
        @Html.Partial("~/Views/Maps/_MapDetailsList.cshtml", Model.saVM)

</div>

My MapDetails PArtial Control очень сложный, поэтому я даю урезанную версию

<table>
    <thead>
        <tr><th/><th/><th/></tr>
        <tr><th/><th/><th/></tr>
    </thead>
    <tbody>
      @foreach(ShortStudent geStudent in Model.students)
     {  
        <tr>
           <td>@geStudent.firstname</td>
           foreach (run it x number of times)
            {
               <td>
                   @foreach (ShortResult geResult in Model.results)
                   {
                   if (geResult.ResultValue != null)
                                {

                                    <script>{ setResultValue(@colIndex, @rowIndex, '@geResult.ResultValue'); }</script>
                                }
                      }
               </td>
           }
       </tr>
      }
    </tbody>
</table>

Эта функция setResultValue определена на основном экране (About) и устанавливает innerhtml текущего td

function setResultValue(colIndex, rowIndex, resultValue) {
    alert("inside about");
    var cell = $("#MapDetails").children().children()[rowIndex].children[colIndex];
    cell.innerHTML = resultValue;

}

P.S. Эта сетка преобразуется в сетку кендо на document.ready

Теперь он отлично работает при загрузке страницы, но когда я нажимаю кнопку поиска изнутри панели поиска, я делаю следующее (определенное на частичном контроле панели поиска)

function refreshGrid() {
    alert("search panel");
    var url = '@Url.Action("DisplaySearchResults", "Home")';
    $("#MapDetails").load(url, { searchText: "Lee" }, function () {
        alert("success");
    });

}

P.S. Обратный вызов здесь никогда не запускается

Итак, теперь я привязываю только частичный вид с новыми данными в DisplaySearchResults

Теперь, очевидно, он не находит функцию script setResultValue на главной странице, поэтому я дублировал ту же функцию script setResultValue в частичном списке отображения mapdetailslist (что, конечно, плохой практике)

UPDATE

После отладки я получил еще несколько подробностей, так что теперь новая проблема связана с загрузкой страницы, которую я могу получить $ ( "# MapDetails" ). Дети(). Детей() [RowIndex] но после нажатия кнопки то же самое происходит undefined

Ответ 1

Таким образом, проблема заключалась в том, что я не мог получить элемент td со следующим кодом

$("#MapDetails").children().children()[rowIndex]

Я решил это очень хакерским способом, но хотел бы иметь более аккуратное решение

function setResultValue(colIndex, rowIndex, resultValue) {

if ($("#MapDetails").children().children()[rowIndex] != undefined) {
    var cell = $("#MapDetails").children().children()[rowIndex].children[colIndex];
    cell.innerHTML = resultValue;
}
else {
    var newRow = 0, newCol = 0, assessmentLength = 5, elementPos = 0;
    newRow = rowIndex - 3;
    newCol = colIndex - 4;

    elementPos = (newRow * assessmentLength) + newCol;
    $(".test").get(elementPos).innerHTML = resultValue;

}
}

.test - это класс моего td, который вы можете видеть в разметке

Мой вопрос о последовательности загрузки элемента script элемента и dom, когда частичное представление рендеринга все еще существует