エンティティLocationがあり、InLine 編集モードで Kendu UI Grid を使用しています。エンティティはプロパティDisplayNameを所有しています。これは必須であり、データベースに2 回存在してはなりません。
現時点では、必須の検証メッセージ を表示するように機能します。
また、 LocationController Ajax InLine Create メソッドで呼び出されるCustomValidateModelメソッドを構築するためにも機能します。このメソッドは、 Name がデータベースに既に存在するかどうかを確認し、ModelErrorを追加します。このエラーをキャッチし、javascript を介して.Events(events => events.Error("onError"))でキャッチし、javascript ポップアップを介してメッセージを表示します。
ModelState.AddModelError("DisplayName", "Name already exists.");
そして、これが問題の核心です:私はこの JavaScript ポップアップ メッセージを表示したくありません。この「フィールドが必要です!」のように、フィールドの下にもこの情報が必要です。メッセージ。私は十分な時間を検索しましたが、ほとんどの人はこの検証のみを提案し、現時点では機能しているため、javascript を介して出力します。
さらに、ポップアップ以外の実際の問題は、ユーザーがグリッドで作成したいレコードが、javascript ポップアップを確認した後に消えてしまうことです。しかし、使いやすさのために、改行と入力が持続することを望みます。ユーザーは指定された名前を編集できる必要があり、彼は保存したいと考えていました。また、完全な行をもう一度入力しないでください。検証メッセージ「名前は既に存在します」のみ。情報の入力を求める必要があります。
コード:
場所エンティティ:
public class LocationDto
{
public Guid? ID { get; set; }
[Required(AllowEmptyStrings = false, ErrorMessage = "Field required!")]
public string DisplayName { get; set; }
// other properties
}
LocationController アクション メソッド:
[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());
}
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);
}
}
これが同じように機能する可能性があることを願っています。合同の視覚化と使いやすさの向上によると、それは問題ありません。