ASP.NET MVC 4 Html.BeginForm en Vue Partielle , les valeurs après le post n'est pas le droit
Page Principale
-> Section 1 (a certaines listes déroulantes et un bouton "enregistrer")
<div id="tab-section1">
@{Html.RenderPartial("_Section1", Model.Section1);}
</div>
<div id="tab-section2">
<div id="section2">
@{Html.RenderPartial("_Section2", Model.Section2);}
</div>
@{Html.RenderPartial("_SubSection2", Model.SubSection2);}
</div>
La section 1 contenu est placé dans une vue partielle avec @Html.BeginForm en elle.
et le rendu sur l'écran principal à l'aide de @Html.RenderPartial
@using MyData
@model Section1ViewModel
@using(Html.BeginForm("EditSection1", "Project", FormMethod.Post, new { id = "section1-form", name = "section-form" }))
{
@Html.HiddenFor(model => model.ProjectID)
<table id="modules">
<tr>
<td class="bold" colspan="2">Modules
</td>
</tr>
<tr>
<td>
@Html.DropDownListFor(m => m.SubmittedModules, new MultiSelectList(Model.AvailableModules, "ModuleID", "ModuleName", Model.SelectedModules.Select(m => m.ModuleID)),
new { multiple = "multiple", @class = "multiselectb" })
</td>
<td>
<input type="button" id="btnAddModule" value=" + " />
</td>
</tr>
@foreach (Module b in @Model.SelectedModules)
{
<tr>
<td colspan="2">
@b.ModuleName
</td>
</tr>
}
</table>
}
Quand je clique sur le bouton enregistrer dans la vue partielle, il doit mettre à jour ses propres contenus, ainsi que d'autres vue partielle SubSection2 doit être actualisé.
Dans la méthode de l'action, je retourne les nouvelles valeurs, et pour la deuxième vue partielle mise à jour, j'ai créer une requête ajax soumettre fonction d'où je ne l' #secondpartialview.charge
Action:
[HttpPost]
public ActionResult EditSection1(Section1ViewModel viewModel)
{
Section1Data section1Data = new Section1Data(_UnitOfWork);
//save changes
section1Data.SaveSection1(viewModel);
viewModel = section1Data.GetSection1ViewModel(viewModel.ProjectID);
return PartialView("_Section1", viewModel);
}
Ajax soumettre:
$("#section1-form").submit(function () {
$("#section1-saving").html("<img src='../../Images/ajax-loader.gif' />");
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
success: function (result) {
$("#section1-saving").html("Saved!");
$.ajaxSettings.cache = false;
//Refresh the sub section 2 on the Section 2 tab
$("#subSection2").load('../../Projects/subSection2/' + $("#ProjectID").val());
},
error: function (jqXHR, textStatus, errorThrown) {
$("#section1-saving").html("Error: " + textStatus + " " + errorThrown);
}
});
return false;
});
La question est: le DÉBOGUEUR me montre les valeurs mises à jour pour selectedModules dans la méthode d'action, mais PAS sur l'INTERFACE utilisateur.
Ce qui me manque?
- Pouvez-vous poster le HTML, le JavaScript et le code de la méthode d'action?
- Posté code bits
- Vous chargez le résultat dans un élément avec l'id 'subSection2', est-ce quelque chose qui est défini dans le
_SubSection2
partielle? - Correct. Et il est rendu parfaitement.Problème avec l'SelectedModules de ne pas être mis à jour dans l'INTERFACE utilisateur de section1, tout en accordant aux valeurs correctes pendant le débogage.
- Je ne peux pas voir tout ce qui pourrait mettre à jour la section 1, à l'exception de la soumission d'un formulaire qui serait la cause de toute la page se recharge. J'ai toujours consulter ce lien pour le rechargement des groupes d'experts indépendants via AJAX: codeproject.com/Articles/460893/...
Vous devez vous connecter pour publier un commentaire.
J'ai eu ce genre de problème quand j'ai plusieurs vue Partielle en une seule Vue Parent.Ce que vous devez faire, c'est que,
Dans la Vue Parent d'Appel Section1 Paritial Vue
comme
Maintenant dans le _Section1 Vue Partielle appelez votre _Section2 Vue Partielle
À l'aide de cette Approche de la Vue Partielle à l'intérieur d'une Vue Partielle, vous serez en mesure d'obtenir la Valeur de votre INTERFACE utilisateur.Ceci est applicable pour plusieurs partielle de la vue à l'intérieur d'un parent de la vue.
Aussi j'aime appeler ma vue partielle comme