我正在重写帖子以使其更清晰
我有一个具有以下操作的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是一个具有2个视图模型的超类 - 用于搜索面板部分控制的scM - 用于MapDetailList部分控制的saVM
On Page load将SuperMapModel传递给View,它将各个模型传递给每个部分控件
<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>
我的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)上定义,并设置当前td的innerhtml
function setResultValue(colIndex, rowIndex, resultValue) {
alert("inside about");
var cell = $("#MapDetails").children().children()[rowIndex].children[colIndex];
cell.innerHTML = resultValue;
}
P.S。此网格将转换为document.ready
上的kendo网格现在它在页面加载时完美运行但是当我从搜索面板内部单击搜索按钮时,我执行以下操作(在searchpanel部分控件上定义)
function refreshGrid() {
alert("search panel");
var url = '@Url.Action("DisplaySearchResults", "Home")';
$("#MapDetails").load(url, { searchText: "Lee" }, function () {
alert("success");
});
}
P.S。这里的回电永远不会被解雇
所以现在我只使用 DisplaySearchResults
中的新数据绑定部分视图现在显然它在主页面上找不到脚本函数setResultValue所以我在部分视图mapdetailslist上复制了相同的脚本函数setResultValue(这是一个不好的做法)
更新
调试后我得到了更多的细节,所以现在新的问题是页面加载我可以得到 $(&#34;#MapDetails&#34)。儿童()的儿童()[rowIndex位置] 但按下按钮后,同样是未定义的
答案 0 :(得分:0)
所以问题是我无法使用以下代码获取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类
关于部分视图渲染仍然存在时加载脚本元素和dom元素的顺序的问题