Как заблокировать поля в зависимости от значения в выпадающем списке в бэкэнде - PullRequest
2 голосов
/ 04 октября 2019

Я разрабатываю небольшую форму в C # и ASP.NET MVC , и я хочу сделать все входные данные как только для чтения , когда у меня естьзначение Закрыто выбрано в моем DropDownList, а также readOnly, включая кнопку Send.

enter image description here

Значение Закрыто исходит из другого ракурса. Я имею в виду, когда я ввожу детали, чтобы увидеть информацию этой формы (которая уже должна быть загружена), если в поле Status есть значение Закрыто, чтобы показать мне все поля только для чтения и, таким образом, разрешить его нельзя изменить.

Я прикрепил ниже код моей формы в html и контроллер для загрузки данных

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
                               
                               <div class="form-group">
                                    <label class="required-field" name="email" for="ticketEmailAppliInput">Email:</label>
                                    <input onchange="validate(this)" maxlength="100" id="ticketEmailAppliInput" type="email" name="email" class="form-control form-control-user validateable" />
                                    
                                </div><div class="form-group">
                                        <label class="required-field" name="area" for="ticketAreaAppliInput">Área:</label>
                                        <input onchange="validate(this)" maxlength="100" id="ticketAreaAppliInput" type="text" name="area" class="form-control form-control-user validateable" />
                                        
                                    </div>
                                    <div class="form-group">
                                        <label class="required-field" name="ubicacion" for="ticketLocationAppliInput">Location:</label>
                                        <input onchange="validate(this)" maxlength="100" id="ticketLocationAppliInput" type="text" name="ubicacion" class="form-control form-control-user validateable" />
                                        
                                    </div>
                                    <div class="form-group" id="CategoryDiv">
                                        <label class="required-field" name="category" for="ticketCategoryInput">Category:</label>
                                        <select onchange="validate(this)" id="ticketCategoryInput" name="category" class="form-control form-control-user validateable" style="width: 100%; padding: 0.375rem 0.75rem; height: 50px;" tabindex="-1" aria-hidden="true">
                                            <option value="" disabled selected>Select Option</option><option>Category 1</option>
                                        <option>Category 2</option>
                                        </select>
                                        
                                    </div>
                                    <div class="form-group" id="StatusDiv">
                                    <label for="ticketStatusInput">Status:</label>
                                    <select id="ticketStatusInput" name="status" class="form-control form-control-user" style="width: 100%; padding: 0.375rem 0.75rem; height: 50px;" tabindex="-1" aria-hidden="true">
                                        <option value="" disabled selected>Select Option</option><option>Open</option>
                                        <option>Closed</option>
                                    </select>
                                </div>
                                
                                <button type="button" id="submit" onclick="validate()" class="btn btn-primary btn-user btn-block">Send</button>

Контроллер

[HttpPost]
        public JsonResult UpdateTicketFromDetails()
        {
            var ticketAreaAppliInput = Request.Form["ticketAreaAppliInput"];
            var ticketLocationAppliInput = Request.Form["ticketLocationAppliInput"];         
            var ticketCategoryInput = Request.Form["ticketCategoryInput"];
            var ticketStatusInput = Request.Form["ticketStatusInput"];
        try
            {
                TicketRegisterResult result;               
                using (var scope = new TransactionScope())
                {
                    // I create a new record variable with all fields
                    var record = new TK_DT_RECORDS
                    {
                        TK_CT_STATUS_ID = ticketStatusInput,
                        TK_CT_CATEGORIES_ID = ticketCategoryInput
                    };
                    // We update the ticket data (this will always be done)
                    var model = new TicketRegisterModel();

                    // We create the new record in the record table and insert it
                    result = model.UpdateTicket(
                     ticketAreaAppliInput, ticketLocationAppliInput, record);

                    //If the ticket was not saved, the transaction is finished and we return the error message
                    if (!result.Success)
                        return Json(new TicketResult
                        {
                            IsValid = false,
                            Error = "The changes could not be saved, please try again."
                        });
                    scope.Complete();
                }   
            }catch (DbEntityValidationException ex)
    {
        //Falló al tratar de registrar datos en la base de datos
        foreach (var e in ex.EntityValidationErrors)
        foreach (var validationError in e.ValidationErrors)
            Console.WriteLine("Property: " + validationError.PropertyName + " Error: " +
                              validationError.ErrorMessage);

        return Json(new TicketResult
        {
            IsValid = false,
            Error = "Ocurrió un error al crear el ticket, por favor inténtalo de nuevo."
        });
    }
return Json(new TicketResult
        {
            IsValid = true
        });
        }

ОБНОВЛЕНИЕ:

У меня уже есть проверкасделано с JQuery спереди, но это также необходимо сделать сзади, я делаю это для безопасности, через консоль браузера я могу осмотреть элемент и удалить свойства JQuery, поэтому необходимо сделать это сзади,Я не использую метки RAZOR или <ASP>.

Консультации с JQuery можно использовать, если проверка выполняется только спереди, эта проверка уже выполнена, но этонесколько небезопасно, потому что к нему можно получить доступ из консоли браузера, проверить элемент и удалить свойство disabled JQuery

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...