ASP.Net MVC: appel d’une méthode depuis une vue

Dans mon application MVC, le contrôleur obtient les données (modèle) à partir d’une API externe (il n’y a donc pas de classe de modèle utilisée) et les transmet à la vue. Les données (modèle) ont un conteneur dans lequel se trouvent plusieurs objects avec plusieurs champs (valeurs de chaîne). Une vue parcourt chaque object et appelle une autre vue pour dessiner chacune d’elles. Cette vue parcourt les champs (valeurs de chaîne) et les dessine.

Voici où cela devient difficile pour moi. Parfois, je veux faire un formatage spécial sur les champs (valeurs de chaîne). Je pourrais écrire 20 lignes de code pour le formatage, mais je devrais le faire pour chaque domaine, ce qui serait stupide et si moche. Au lieu de cela je voudrais prendre le champ (valeur de chaîne), le passer à une méthode et récupérer une autre valeur de chaîne. Et puis faites cela pour chaque domaine.

Alors, voici ma question:

Comment appeler une méthode depuis une vue?

Je me rends compte que je peux poser la mauvaise question ici. La réponse est probablement que je ne le fais pas, et que je devrais utiliser un modèle local et désérialiser l’object que je reçois de l’API externe vers mon modèle local puis, dans mon modèle local, faire le “formatage spécial” avant de passer à la vue. Mais j’espère qu’il y a un moyen d’appeler une méthode à partir d’une vue. La plupart du temps, la conversion de l’object personnalisé provenant de l’API, qui à son tour contient beaucoup d’autres objects personnalisés, en objects locaux personnalisés que je crée, constitue une charge considérable. Et aussi, je ne suis pas sûr de la meilleure façon de le faire.

Clause de non-responsabilité: Je connais le sujet similaire “ASP.NET MVC: appeler une méthode de contrôleur depuis la vue” ( ASP.NET MVC: appeler une méthode de contrôleur depuis la vue ) mais je ne vois pas comment cela répond à ma question.

Voici comment vous appelez une méthode d’instance sur le contrôleur:

 @{ ((HomeController)this.ViewContext.Controller).Method1(); } 

Voici comment vous appelez une méthode statique dans n’importe quelle classe

 @{ SomeClass.Method(); } 

Cela fonctionnera en supposant que la méthode est publique et visible à la vue.

En vous appuyant sur la réponse d’Amine, créez un assistant comme:

 public static class HtmlHelperExtensions { public static MvcHtmlSsortingng CurrencyFormat(this HtmlHelper helper, ssortingng value) { var result = ssortingng.Format("{0:C2}", value); return new MvcHtmlSsortingng(result); } } 

dans votre vue: utilisez @Html.CurrencyFormat(model.value)

Si vous faites une mise en forme simple comme les formats numériques standard , utilisez simplement ssortingng.Format () dans votre vue, comme dans l’exemple ci-dessus:

 @ssortingng.Format("{0:C2}", model.value) 

Vous pouvez implémenter une méthode de formatage statique ou une aide HTML, puis utilisez cette syntaxe:

 @using class_of_method_namespace ... // HTML page here @className.MethodName() 

ou en cas d’aide HTML

 @Html.MehtodName() 

Contrôleur non censé être appelé de vue. C’est l’idée même de MVC – une séparation claire des préoccupations.

Si vous devez appeler le contrôleur depuis View, vous faites quelque chose de mal. Temps de refactoring.

pourquoi vous n’utilisez pas Ajax pour

sa simple et ne nécessite pas de page refresh et a success and error rappels de success and error

regarde mon samlpe

 @Resource_en.ResendVerificationCode 

et dans JQuery

  $("#ResendVerificationCode").on("click", function() { getUserbyPhoneIfNotRegisterd($("#phone").val()); }); 

et ceci est mon ajax qui appelle mon contrôleur et mon contrôleur et retourne l’object de la firebase database

 function getUserbyPhoneIfNotRegisterd(userphone) { $.ajax({ type: "GET", dataType: "Json", url: '@Url.Action("GetUserByPhone", "User")' + '?phone=' + userphone, async: false, success: function(data) { if (data == null || data.data == null) { ErrorMessage("", "@Resource_en.YourPhoneDoesNotExistInOurDatabase"); } else { user = data[Object.keys(data)[0]]; AddVereCode(user.ID);// anather Ajax call SuccessMessage("Done", "@Resource_en.VerificationCodeSentSuccessfully", "Done"); } }, error: function() { ErrorMessage("", '@Resource_en.ErrorOccourd'); } }); } 

Vous devez créer une aide personnalisée pour modifier uniquement le format de chaîne, sauf en utilisant l’appel du contrôleur.