L'utilisation de l'attendent dans de Rasoir vues
Est-il possible de await
sur des missions de Rasoir .cshtml vues?
Par défaut, il se plaint qu'il ne peut être utilisé dans les méthodes marqué avec async
alors je me demandais si peut-être il ya un bouton caché quelque part que permet-il?
- Semble comme quelque chose que vous faites dans votre contrôleur ou plus haut dans la pile de votre dos, le code de fin.
Vous devez vous connecter pour publier un commentaire.
Non, c'est pas possible et vous ne devriez pas avoir à le faire de toute façon. Rasoir avis doit contenir du code et au plus quelques helper appel. async/await appartient à votre backend logique.
async
dans ASP.NET a à voir avec la façon dont le serveur libère le thread de traitement chaque fois qu'une opération de blocage est rencontré, et reprend quand il se termineDans ASP.NET de Base 2.1, vous pouvez utiliser
await
de Rasoir vues.Voir https://docs.microsoft.com/en-us/aspnet/core/mvc/views/partial?view=aspnetcore-2.1
Exemple:
J'ai voulu quelque chose comme cela pour une longue période de temps - beaucoup de pages nous écrire pourrait être jetés ensemble par un Jr Dev s'ils n'avaient pas d'écrire un tas de questions; et, c'est la même requête de base réutilisable à chaque fois de toute façon - pourquoi devraient-ils avoir à les écrire pour chaque Contrôleur, lorsque la majorité de leur travail est d'obtenir le contenu? J'utilise C# donc je n'ai pas à traiter avec la gestion de la mémoire, pourquoi un codeur HTML, avoir à traiter avec de la requête de détails?
Il y est une astuce que vous pouvez utiliser pour trier implicite de charger des données asynchrone dans la Vue. Tout d'abord, vous définissez une classe qui exprime les données que vous voulez. Puis, en haut de chaque Vue, instancier cette classe. De retour dans le Contrôleur, vous pouvez rechercher le point de Vue, vous savez que vous allez utiliser, ouvrez-le, puis compiler cette classe. Vous pouvez ensuite l'utiliser pour aller chercher les données de la Vue aura besoin, async, dans le Contrôleur de la manière MVC applique. Enfin, passer avec un ViewModel pour la Vue comme MVC prescrit, et, grâce à quelques astuces, vous avez une Vue qui déclare que les données qu'il va utiliser.
Voici un StoryController. Jr Devs écrire des histoires simples .cshtml fichiers sans avoir à connaître ce qu'est un Contrôleur de base de données ou LINQ est:
Tout cela n'a pour l'instant est d'aller récupérer le fichier de Vue en fonction de l'URL, permettant à quelque chose comme WebForms (sauf à l'intérieur et MVC à l'aide de Rasoir). Mais nous voulons montrer que certaines données (dans notre cas, les personnes et les projets qui s'accumulent dans la base de données avec une certaine norme Viewmodel et Partiels. Nous allons définir comment et compiler ça. (Notez que ConservX arrive à être au cœur du Projet de l'espace de noms dans mon cas.)
C'est la majorité du travail. Maintenant, Jr Devs pouvez simplement déclarer les données dont ils ont besoin comme:
J'ai atterri sur cette question, parce que je suis un newbie de Rasoir et je voulais afficher un simple écran "loading" alors que mon Contrôleur de Code était le calcul de données.
Donc j'ai trouvé ce lien: https://www.codeproject.com/Articles/424745/MVC-Razor-In-Progress-Icon qui a été utile, mais parce que j'étais un novice total au Rasoir, j'ai été incapable de faire ce travail.
Ce qui a finalement fonctionné pour moi a été la suivante.
1) Ajouter le "chargement" de la div comme suggéré dans le projet de code de mon .cshtml fichier:
2) Modifier mon Rasoir forme de
à
3) Créer le JavascriptFunction() dans mon .cshtml page:
Si je comprends tous les ci-dessus correctement, ce qui n'est d'exécuter la fonction JavascriptFunction lorsque j'appuie sur le bouton Go.
La JavascriptFunction fait 2 choses:
1) Modification de l'affichage de la page en montrant précédemment cachés (display:none) divLoading div.
2) Soumettre tous les formulaires de cette page (j'ai seulement un, donc il soumet le formulaire de la même manière que si j'avais la catégorie soumettre sur le bouton)
Après que le Contrôleur lancé par le formulaire de soumission est fait, il charge d'un nouveau point de vue sur une nouvelle page, et la page initiale (et le "chargement" div) est parti. La Mission est accomplie.
Je sais que c'est un vieux thread, mais je vais ajouter mon entrée juste au cas où quelqu'un d'autre le trouve utile. J'ai rencontré ce problème à travailler avec le nouveau pilote dans MongoDB ASP.Net MVC - le nouveau pilote (pour l'instant), n'implémente que les méthodes asynchrones et retourne async curseurs, qui ne peut pas être utilisé dans un foreach car asynccursor ne pas mettre en œuvre IEnumerable. L'exemple de code ressemble typiquement à:
Mais, cela ne fonctionne pas dans le rasoir, parce que les vues sont intrinsèquement pas async et await ne coupe pas.
Je l'ai eu à travailler par la modification de la première ligne:
qui retourne vrai jusqu'à ce que le curseur de la frappe de la dernière entrée.
Espère que ça aide!
.Contains()
clause dans LINQ, ouIN (..)
en SQL pour passer d'une liste d'Identifiants?Si vous en avez vraiment besoin, vous pouvez faire cela, il va être laid, mais il faudra travailler.
En Vue
Dans Le Contrôleur
C'est réellement facile. Voici le code de la vue: