Html.RenderPartial ne produit pas de valeur

Bonne journée à tous.

Je sais que c’est une question assez fondamentale en termes de MVC, mais pour la vie de moi, je ne peux pas obtenir @ Html.RenderPartial pour ne pas me donner d’erreur. J’utilise VB.NET et Razor. La plupart des exemples que j’ai trouvés en ligne sont écrits en c #, ce qui n’est pas difficile pour moi de convertir, mais celui-ci me laisse perplexe. Ceci est dans ma vue Index, qui est rendue par le _Layout.vbhtml:

@Section MixPage @Html.RenderPartial("_MixScreen", ViewData.Model) End Section 

L’expression ci-dessus ne produit pas de valeur.

J’ai cherché pendant un bon bout de temps ce matin, et les pages dont je prends des exemples sont les suivantes:

http://geekswithblogs.net/blachniet/archive/2011/08/03/walkthrough-updating-partial-views-with-unobtrusive-ajax-in-mvc-3.aspx

Obtenir le code HTML d’une vue partielle depuis l’intérieur du contrôleur

En fin de compte, ce que j’essaie de faire est de renvoyer le modèle mis à jour à une vue partielle depuis le contrôleur:

  Function UpdateFormulation(model As FormulationModel) As ActionResult model.GetCalculation() Return PartialView("_MixScreen", model) End Function 

et ce contrôleur est appelé à partir d’une expression en javascript:

 function UpdateResults() { jQuery.support.cors = true; var theUrl = '/Home/UpdateFormulation/'; var formulation = getFormulation(); $.ajax({ type: "POST", url: theUrl, contentType: "application/json", dataType: "json", data: JSON.ssortingngify(formulation), success: function (result, textStatus) { result = jQuery.parseJSON(result.d); if (result.ErrorMessage == null) { FillMixScreen(result); } else { alert(result.ErrorMessage); } }, error: function (xhr, result) { alert("readyState: " + xhr.readyState + "\nstatus: " + xhr.status); alert("responseText: " + xhr.responseText); } }); } 

S’il existe un meilleur moyen de renvoyer ce modèle mis à jour à la vue et de ne mettre à jour que cette vue partielle, je suis tout ouïe. Mais la prémisse de cette question est la suivante: pourquoi RenderPartial ne produit-il pas de valeur?

Eh bien, le problème du client est que vous attendez un code html non un code Json dans votre client. Rappelez-vous que, si vous renvoyez une vue, vous retournez la vue compilée, qui modifie le type de données attendu dans votre résultat en HTML.

 $.ajax({ type: "POST", url: theUrl, contentType: "application/json", dataType: "html", data: JSON.ssortingngify(formulation), success: function (result, textStatus) { result = jQuery.parseJSON(result.d); if (result.ErrorMessage == null) { FillMixScreen(result); } else { alert(result.ErrorMessage); } }, error: function (xhr, result) { alert("readyState: " + xhr.readyState + "\nstatus: " + xhr.status); alert("responseText: " + xhr.responseText); } }); 

Aussi, je vous recommande d’utiliser la méthode load , qui est une version courte de ajax et suppose toujours que le résultat attendu est un code HTML et qu’il est ajouté au corps de l’élément dont vous avez besoin.

Seconde. Si vous voulez charger le partiel De votre mise en page, faites-le comme ceci

  //note's that i'm calling the action no the view @Html.Action("UpdateFormulation","yourController", new { model = model}) //<--- this is code in c# don't know how is in vb 

Html.RenderPartial écrit directement dans la réponse; il ne retourne pas de valeur. Ainsi, vous devez l’utiliser dans un bloc de code.

 @Section MixPage @Code @Html.RenderPartial("_MixScreen", ViewData.Model) End Code End Section 

Vous pouvez également utiliser Html.Partial () sans le bloc de code pour faire la même chose car Partial () renvoie une chaîne.

 @Section MixPage @Html.Partial("_MixScreen", ViewData.Model) End Section