Voici une vue d'ensemble; J'ai une vue avec une table de données et en changeant les options de filtre (cases à cocher) J'appelle une action de filtre, fais un peu de travail, puis redirecttoAction à l'action principale qui accepte mes informations de filtre. En parcourant dans le débogage je peux voir les données attendues passées par les actions et même sur la vue avec le construction du html, cependant le html attendu avec plus ou moins de rangées ne rend pas - il reste le même que le a filtré par défaut liste.MVC RedirectToAction ne rend pas le html mis à jour dans la vue
Voici une partie du code.
HTML avec des cases à cocher:
<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>
Action Filtre à contrôleur - 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});
}
Action examen dans le contrôleur - 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);
}
mon avis qui affiche la liste filtrée tableau à l'intérieur fieldset dont les lignes de données sont construites par foreach (pièce MyFilteredData)
* le code html à mon avis est contenu dans un aspic: bloc de contenu sans ouverture et fermeture des balises html
La page se charge correctement la première fois avec le filtre par défaut affichant le nombre correct de lignes dans ma table; La modification des cases à cocher à ajouter à la liste filtrée ne met pas à jour le code HTML comme prévu; Cependant, quand je débogue et passe par le code, les données correctes sont passées à travers les actions et retournent à la vue; il semble que son tout simplement pas rendu la nouvelle/mise à jour html
Est-ce que quelqu'un sait pourquoi ce ne est pas rafraîchissante ou rendre les données filtrées mises à jour, même si je peux voir à travers et l'étape ce que j'attends?