Я переписываю сообщение, чтобы сделать его понятным
У меня есть 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