J'utilise mvc 4 et j'essaie de dynamiser mon application web. Pour le moment, j'essaie de diviser certaines vues en vues partielles afin que le code soit plus lisible et que je puisse mieux réutiliser certaines parties de l'application. Alors maintenant, cela m'amène à un problème. J'ai une vue similaire à celui-ci:Recharger une vue partielle avec un bouton dans la vue partielle
<h1>Manage department</h1>
<div id="EmployeesManagement">@Html.Action("OpenEmployeesManagement")</div>
<div id="DepartmentManagement">@Html.Action("OpenDepartmentManagement")</div>
<div id="DepartmentTumorModels">@Html.Action("OpenDepartmentModels")</div>
Chacun d'entre eux sont des vues partielles qui s'appelle du contrôleur comme:
public PartialViewResult OpenDepartmentModels()
{
ViewBag.ChangeVisibility = -1;
HoDManagementModel hoDManagementModel = new HoDManagementModel { UserWithRoleModelList = azaraUserManagement.GetAllEmployesOfHoD(user.getUserId()), OrganisationUnits = azaraUserManagement.GetAllOrganisationUnitsFromHoD(user.getUserId()) };
List<ModelWithOrganisationUnit> Models = ModelManagement.SearchModelsOfDepartment(hoDManagementModel.OrganisationUnits);
return PartialView("DepartmentModels", Models);
}
Maintenant à mon problème. J'ai une vue partielle comme celui-ci:
@model List<Modelle.Models.BusinessTierObjects.Models.ModelWithOrganisationUnit>
<fieldset>
<legend>Manage the models of your department</legend>
<table class="tablesorter">
<thead>
<tr>
<th>ID</th>
<th>Name </th>
<th>Department </th>
<th>Visibility</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in @Model)
{
<tr>
<td>@item.ModelId</td>
<td>@Html.ActionLink((String)item.ModelName, "Details", "Details", new { id = item.ModelId }, null)</td>
<td>@item.OrganisationUnitName</td>
@if (ViewBag.ChangeVisibility == item.ModelId)
{
<td><select name="ChangeVisibility" id="ChangeVisibility">
<option value="Department" onclick="location.href='@Url.Action("ChangeVisibility", "ManageDepartment", new {tumorModelId = item.ModelId, Visibility = 0})'">Department</option>
option value="Coop" onclick="location.href='@Url.Action("ChangeVisibility", "ManageDepartment", new { ModelId = item.ModelId, Visibility = 2 })'">Coop</option>
<option value="WWW" onclick="location.href='@Url.Action("ChangeVisibility", "ManageDepartment", new { ModelId = item.ModelId, Visibility = 3 })'">WWW</option>
</select></td>
}
else{
switch ((byte)item.Visibility)
{
case 0: <td>Department</td>; break;
case 2: <td>Coop</td>; break;
case 3: <td>WWW</td>; break;
}
}
<td><button name="button" class="button" onclick="location.href='@Url.Action("RequestChangeVisibility", "ManageDepartment", new { change = @item.ModelId })'">Change Visibility</button>
</td>
</tr>}
</fieldset>
et si je clique sur le dernier bouton juste la vue partielle devrait être rechargées. Mais à la place, l'application ne montre que la vue partielle sans aucune disposition dans le navigateur. Qu'ai-je fait de mal ou n'est-il pas possible de résoudre mon problème? L'action du contrôleur à partir du bouton est:
public PartialViewResult RequestChangeVisibility(int change)
{
ViewBag.ChangeVisibility = change;
HoDManagementModel hoDManagementModel = new HoDManagementModel { UserWithRoleModelList = azaraUserManagement.GetAllEmployesOfHoD(user.getUserId()), OrganisationUnits = azaraUserManagement.GetAllOrganisationUnitsFromHoD(user.getUserId()) };
List<ModelWithOrganisationUnit> Models = ModelManagement.SearchModelsOfDepartment(hoDManagementModel.OrganisationUnits);
return PartialView("DepartmentModels", Models);
}
Merci beaucoup, vous sauvez ma journée :). Tout fonctionne bien maintenant, donc je peux essayer de modifier toutes mes vues partielles de cette façon. Merci aussi pour le tutoriel. Je googling pour les vues partielles mais j'ai presque obtenu seulement des didacticiels de mvc 2. –
Vous avez oublié la fonction du contrôleur.Trouvé que retourner un PartialViewResult et faire 'return PartialView (" Blah ", blah);', où "Blah" est le nom de la vue et "blah" est le IEnumerable du modèle, dans mon cas, était le chemin à parcourir, en combo avec la réponse donnée en remplaçant le .html(). Fondamentalement très similaire à la fonction 'RequestChangeVisibility' donnée par l'OP dans la question, mais pas exactement, puisque j'avais un tas d'objets dans ma vue partielle. Les réponses complètes sont appréciées, donc la confirmation que cette partie était correcte aurait été utile. Trop peu de conseils disponibles sur ce en ligne. –
vapcguy