Вот обзор; У меня есть представление с таблицей данных, и при изменении параметров фильтра (флажков) я вызываю действие фильтра, проделайте некоторую работу, затем перенаправьте на действие основное действие, которое принимает мою информацию о фильтре. Выполняя отладку, я вижу ожидаемые данные, передаваемые через действия, и даже в представлении с создание html, однако html, ожидаемый с большим или меньшим количеством строк, не отображается - он остается таким же, как и отфильтрованный список по умолчанию.
Вот часть кода.
HTML с флажками:
<fieldset>
<legend style="color: #27568e;">Filter</legend>
<table id="Filter">
<thead>
</thead>
<tbody>
<tr>
<td>
<input type="checkbox" value="14" name="filterList" checked="checked"/>Type1
<input type="checkbox" value="15"name="filterList" checked="checked"/>Type2
<input type="checkbox" value="16" name="filterList" />Type3
<input type="checkbox" value="17" name="filterList" />Type4
<input type="button" value="Filter" id="Filterbutton" onclick="getFilterList('<%= Model.myId %>','filterList');" />
</td>
</tr>
</tbody>
</table>
</fieldset>
Javascript / JQuery
<script type="text/javascript">
function getFilterList(id, checklist)
{
var data = {};
var resultString = new String;
var selected = new Array();
var loopCounter = 0;
jQuery("input[name=" + checklist + "]:checked").each(function () {
//selected[loopCounter] = jQuery(this).val();
resultString += jQuery(this).val() + ",";
loopCounter += 1;
});
resultString = resultString + id.toString();
selected.push(id);
jQuery.post("/MyContr/Filter/", { resultStr: resultString });
};
</script>
Действие фильтра в контроллере - MyContr:
[AcceptVerbs(HttpVerbs.Post)]
public RedirectToRouteResult Filter(String resultStr)
{
string strList = string.Empty;
Stack<string> myStack = new Stack<string>( resultStr.Split(new string[] { "," }, StringSplitOptions.None));
// Remove the id
var id = Convert.ToInt64(myStack.Pop());
//convert rest of values (selected checkbox values) to string and pass to Review *was not able to pass array
//build strList
while (myStack.Count > 0)
{
strList += myStack.Pop() +",";
}
if (strList != string.Empty)
strList = strList.Remove(strList.Length - 1, 1); //remove last comma
return RedirectToAction("Review", "myContr", new{id=id,filterList=strList});
}
Действие проверки в контроллере - MyContr:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Review(long id, string filterList)
{
string[] strArray = new string[]{};
int[] filterArray;
if (filterList == null)
{
filterArray = new int[] { 14, 15 };//default to specific types
}
else
{ //if filterList is not null
strArray = filterList.Split(new string[] { "," }, StringSplitOptions.None); //split string into array
//convert str[] to int[]
filterArray = new int[strArray.Length];
for (int x = 0; x < strArray.Length; x++)
{
filterArray[x] = Convert.ToInt32(strArray[x].ToString());
}
}
var myData = something.GetMyData(id);
ViewData["checkboxes"] = filterArray;
return View(myData);
}
мое представление, которое выводит отфильтрованный список таблица в наборе полей, строки данных которой построены foreach (элемент в MyFilteredData)
* html в моем представлении содержится в блоке asp: Content без открывающих и закрывающих html-тегов
Страница загружается правильно в первый раз с фильтром по умолчанию, показывающим правильное количество строк в моем столе; Изменение флажков для добавления в отфильтрованный список не обновляет html должным образом; ОДНАКО, когда я отлаживаю и перехожу через код, правильные данные передаются через действия и обратно в представление; кажется, что он просто не отображает новый / обновленный html
Кто-нибудь знает, почему он не обновляет или не отображает обновленные отфильтрованные данные, хотя я могу пройти через них и увидеть чего я ожидаю?