Kendo Grid Modifier le message InLine Custom Validation, par ex. pour les noms en double, etc.
J'ai une entité Lieu et je suis en utilisant le Kendu de l'INTERFACE utilisateur de la Grille en ligne en mode edit.
L'entité possède une propriété DisplayName, ce qui est nécessaire et ne doit pas exister deux fois dans la base de données.
À l'heure actuelle, il travaille pour afficher le message de Validation:
Et il travaille également à construire une méthode de CustomValidateModel appelé LocationController Ajax InLine méthode de création, qui vérifie si le Nom est déjà existant dans la base de données et ajoute ensuite un ModelError. Je rattrape cette erreur alors dans le .Les événements(events => les événements.Erreur("onError")) via javascript et de montrer ensuite le message via javascript popup.
ModelState.AddModelError("DisplayName", "Name already exists.");
Et c'est le cœur de la question: je ne veux pas avoir ce javascript popup message. Je veux avoir aussi cette information ci-dessous le domaine, à l'instar de ce "Champ obligatoire!" message.
J'ai cherché beaucoup de temps, mais la plupart des gens suggèrent que cette Validation et la sortie via du javascript, il travaille dans l'instant.
En outre, le problème réel en plus de la fenêtre contextuelle, est, que l'enregistrement, l'utilisateur veut créer dans la Grille, puis sur disparition après la confirmation du javascript popup.
Mais pour l'ergonomie, je veux que la nouvelle ligne et l'entrée persiste. Les utilisateurs devraient être en mesure de modifier le Nom donné, il voulait sauver. Et NE devrait saisir l'intégralité de la ligne à nouveau. Seul le message de Validation "Nom déjà existant." doit demander les informations.
Code:
Localisation de l'entité:
public class LocationDto
{
public Guid? ID { get; set; }
[Required(AllowEmptyStrings = false, ErrorMessage = "Field required!")]
public string DisplayName { get; set; }
//other properties
}
LocationController méthode d'Action:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult CreateInline([DataSourceRequest] DataSourceRequest request, LocationDto model)
{
CustomValidateModel(model); //checks if the DisplayName is already existing in the DB
if (model != null && ModelState.IsValid)
{
//Create and Save the Model into database
}
return Json(ModelState.ToDataSourceResult());
}
fonction javascript:
function onError(e, status) {
if (e.errors) {
var message = "Error:\n";
$.each(e.errors, function (key, value) {
if (value.errors) {
message += value.errors.join("\n");
}
});
this.cancelChanges();
alert(message);
}
}
J'espère qu'il ya une possibilité de le faire fonctionner de la même manière. Il serait bien selon conforme à la visualisation et à une amélioration de la convivialité.
source d'informationauteur florian.isopp
Vous devez vous connecter pour publier un commentaire.
Nous l'avons fait dans une Grille comme vous avez fait sur le contrôleur de côté par l'ajout de notre erreur personnalisé pour le modèle de l'état et de passage que de la vue. Et puis, dans la onError javascript événement, nous avons construit le message de validation de nous-mêmes et l'a placé dans la grille.
Javascript onError:
Puis créer un validationMessageTmpl (ou ce que vous voulez l'appeler):
Autant que pourquoi la saisie de l'utilisateur est en train de disparaître, je suppose que:
peut avoir quelque chose à faire avec elle. Je crois que cela ne fonctionne tout simplement ce qu'il dit et annule toutes les modifications apportées. Qui serait réinitialiser votre grille et supprimer toutes les entrées de l'utilisateur.
Une chose à noter: le code dans Le ModelState (également la clé dans votre $.chaque) doit être le même nom que le modèle de vue de la propriété utilisée pour la colonne que vous voulez afficher l'erreur.
Avec la modification de l'autre de répondre et d'essayer de contourner, j'ai construit une solution de travail:
Emplacement De La Modifier.cshtml Grille de Rasoir:
Emplacement De La Modifier.cshtml js:
LocationController.cs
Résultat:
Vous pouvez l'essayer;
Et
}
Pour plus de documentation kendo site de démonstration pour validation personnalisée.