как добавить уникальное имя пользователя в kendo ui и показать предупреждение или сообщение после этой вставки дубликата имени пользователя - PullRequest
0 голосов
/ 20 декабря 2018

Я хочу использовать kendo ui для управления пользователями в asp.net mvc, и мне нужно, чтобы kendo ui не создавал дублирующее имя пользователя и отображал сообщение об ошибке, что «имя пользователя дублировано»

thisмои действия по созданию

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult AddNewCountry([DataSourceRequest]DataSourceRequest request, CountryViewModel c,int countryId)
{
    if (c != null && ModelState.IsValid)
    {
        countryService.Create(c);
    }
    return Json(new[] { c }.ToDataSourceResult(request, ModelState));
}

Заранее благодарен за помощь

1 Ответ

0 голосов
/ 20 декабря 2018

Я отправил вам решение в другом вашем посте (см. здесь ).Но вот как вы обрабатываете ошибки на стороне СЕРВЕРА, используя сетку КЛИЕНТА kendo.Некоторые из этих шагов могут быть изменены.Например, вы можете вывести предупреждение вместо отображения ошибки в шаблоне редактора.

1) Добавить ошибку состояния модели в ваше действие:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult AddNewCountry([DataSourceRequest]DataSourceRequest request, CountryViewModel c,int countryId)
{
    if (countryService.UserExists(c.UserName) // You need to code this
    {
        ModelState.AddModelError("UserName", "User name already exists.");
    }

    if (c != null && ModelState.IsValid)
    {
        countryService.Create(c);
    }
    return Json(new[] { c }.ToDataSourceResult(request, ModelState));
}
Обработка события ошибки в вашем источнике данных:

@(Html.Kendo().Grid<OrderDetailViewModel>()
    .Name("orderDetailsGrid")

    /* Not relevant grid setup code... */

    .DataSource(dataSource => dataSource
        .Ajax()
        .Read(builder => builder.Url("/api/CustomerOrderDetails/GetOrderDetails/" + Model.OrderId).Type(HttpVerbs.Get))
        .Create(builder => builder.Url("/api/CustomerOrderDetails/CreateOrderDetail/" + Model.OrderId).Type(HttpVerbs.Put))
        .Update(builder => builder.Url("/api/CustomerOrderDetails/UpdateOrderDetail").Type(HttpVerbs.Post))
        .Destroy(builder => builder.Url("/api/CustomerOrderDetails/DeleteOrderDetail").Type(HttpVerbs.Delete))
        .Model(model => {
            model.Id(x => x.OrderDetailId);
            model.Field(m => m.OrderDetailId).DefaultValue(0);
        })
        .Events(events =>  events.Error("OrderDetails_Error"))
    ))

3) Добавьте заполнитель для ошибок в шаблон вашего редактора:

<ul class="errors"></ul>

4) Установите шаблон кендо для обработки ошибок:

<script type="text/x-kendo-template" id="orderDetailsValidationMessageTemplate">
    # if (messages.length) { #
        <li>#=field#
            <ul>
                # for (var i = 0; i < messages.length; ++i) { #
                    <li>#= messages[i] #</li>
                # } #
            </ul>
        </li>
    # } #
</script>
Напишите обработчик ошибок js, который будет просматривать возвращенные ошибки сервера и отформатировать их в шаблон, который можно отобразить на странице редактора:

OrderDetails_Error = function(args) {
    if (args.errors) {
        var grid = $("#orderDetailsGrid").data("kendoGrid");
        var validationTemplate = kendo.template($("#orderDetailsValidationMessageTemplate").html());
        grid.one("dataBinding", function(e) {
            e.preventDefault();

            $.each(args.errors, function(propertyName) {
                // take the template and insert it into the placeholder
                var renderedTemplate = validationTemplate({ field: propertyName, messages: this.errors });
                grid.editable.element.find(".errors").append(renderedTemplate);
            });
        });
    }
};
...