Я разрабатываю небольшую форму с помощью C # и ASP.NET MVC , и в этой форме у меня есть dropdownlist
, который показывает некоторые включенные состояния, это зависит отзначение, которое приходит в форме, которая в этом случае будет FINISHED .
Я хотел бы наложить некоторое ограничение со стороны сервера, чтобы избежать того, что если пользователь изменит значения disabled
с консоли навигатора, он не позволит ему их отправлять, чтоМне действительно нужно проверить в контроллере, что эти данные не отправляются.
Ниже приведен код dropdownlist
с различными параметрами
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<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 a option</option>
<option value="ABT" disabled="">OPEN</option>
<option value="ASG">ASSIGNED</option>
<option value="CDO" disabled="">CLOSED</option>
<option value="ESU" disabled="">WAITING FOR USER</option>
<option value="PRC">IN PROCESS</option>
<option value="TMN">FINISHED</option>
</select>
Идентификаторы состояний ABT соответствуют состоянию OPEN , ASG соответствует состоянию ASSIGNED , CDO соответствуетсостояние CLOSED , ESU, соответствует состоянию ПОЛЬЗОВАТЕЛЬСКОЕ ОЖИДАНИЕ , PRC соответствует состоянию IN PROCESS , и, наконец, TMN соответствует FINISHED state.
Это функция Javascript, которая загружает данные и выполняет соответствующую проверку. Ясно, что TMN соответствует состоянию FINISHED.
function loadTicketDetails() {
$(".fixed-action-btn").floatingActionButton();
$(".fixed-action-btn").show("slow");
$('[data-toggle="tooltip"]').tooltip();
document.getElementById("modalAceptNew").style.display = "none";
const url = document.getElementById("allTicketData").value;
window.hasRun = true;
$.ajax({
url: url,
type: "POST",
dataType: "json",
success: function (data) {
$("#StatusDiv select").val(data.Status);
//Validation when FINISHED can be assigned to ASSIGNED/IN PROCESS
if (data.Status == 'TMN') {
$("#StatusDiv select option[value*='ABT']").prop("disabled", true);
$("#StatusDiv select option[value*='CDO']").prop("disabled", true);
$("#StatusDiv select option[value*='ESU']").prop("disabled", true);
}
},
error: function() {
alert("There was an error loading the data, please try again.");
}
});
}
И, наконец, контроллер, который должен выполнять некоторую проверку в обратном направлении.
[HttpPost]
public JsonResult UpdateTicketFromDetails()
{
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,
};
// 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;
//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)
{
//Failed to try to register data in the database
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 = "There was an error creating the ticket, please try again."
});
}
return Json(new TicketResult
{
IsValid = true
});
}
Данные будут отправляться всегда, потому что я не могу это контролировать. мне нужна функция, которая позволяет контролировать достоверность данных.
Я нашел статью, в которой говорится о проверке данных на стороне контроллера, но она мне не очень понятна, как только я начну с C #
Артикул
Бизнес-правило
У меня есть раскрывающийся список, где значения ОТКРЫТО , НАЗНАЧЕНО , ЗАКРЫТО , ЖДЕТ ПОЛЬЗОВАТЕЛЯ , В ПРОЦЕССЕ , ЗАВЕРШЕНО .
Когда в раскрывающемся списке появляется значение FINISHED , его можно назначить только для ASSIGNED или IN PROCESS означает, что остальные отключены.
ОБНОВЛЕНИЕ:
У меня проблема с асинхронной функцией <InputStatus>