javascript - 如何创建函数以在后端验证下拉列表

标签 javascript c# asp.net-mvc

我正在使用 C#ASP.NET MVC 开发一个小表单,在这个表单中我有一个 dropdownlist它显示了一些启用状态,这取决于表单中出现的值,在本例中为 FINISHED

我想在后端设置一些限制,以避免用户更改 disabled 的值从导航器的控制台,它不允许他发送它们,我真正需要的是在 Controller 中验证未发送此数据。

下面是代码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>

状态ID为ABT对应OPEN状态,ASG对应ASSIGNED状态,CDO对应CLOSED状态,ESU,对应于USER WAITING状态,PRC对应于IN PROCESS状态,最后TMN对应于FINISHED状态。

这是加载数据的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.");
        }
    });

}

最后是 Controller ,它应该在后面进行一些验证

[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
            });
            }

数据将始终被发送,因为我无法控制它。我需要的是一个允许控制数据是否有效的函数。

我找到了一篇关于 Controller 端数据验证的文章,但我一开始使用 C# 就不太清楚了

Article

业务规则

我有一个下拉列表,其中值 OPENASSIGNEDCLOSEDIS WAITING FOR USER处理中完成

FINISHED 值到达下拉列表时,它只能分配给ASSIGNEDIN PROCESS 表示其他都被禁用。

更新:

我提出了异步函数的问题 <InputStatus>

enter image description here

最佳答案

您也可以使用此方法。

如果您想要更多验证,您也可以创建自定义验证。

您可以在数据库中获取所有禁用选项,然后检查是否要阻止静态数据压缩。

[HttpPost]
public JsonResult UpdateTicketFromDetails()
{
    var ticketStatusInput = Request.Form["ticketStatusInput"];

    var ticketStatusInput = Request.Form["ticketStatusInput"];
    var oExcludeItem = new string[] { "ABT", "CDO", "ESU" }; // You can use string array also   
    if (!string.IsNullOrEmpty(ticketStatusInput))
    {
        if (oExcludeItem.Contains(ticketStatusInput))
        {
            return Json(new TicketResult
            {
                IsValid = false,
                Error = "Please select only enable option";
             });
        }
    }
    else
    {
        return Json(new TicketResult
        {
            IsValid = false,
            Error = "Please select valid data";
       });
    }
    var lstDisableOption = new List<string>(); // You can also use with List object
    lstDisableOption.Add("ABT");
            lstDisableOption.Add("CDO");
            lstDisableOption.Add("ESU");
            if (!string.IsNullOrEmpty(ticketStatusInput))
            {
                if (lstDisableOption.Any(x => x == ticketStatusInput))
                {
                    return Json(new TicketResult
                    {
                        IsValid = false,
                        Error = "Please select only enable option";
                    });
                 }
            }
            else
            {
                return Json(new TicketResult
                {
                    IsValid = false,
                    Error = "Please select valid data";
                 });
             }
        }

    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
    });
}

关于javascript - 如何创建函数以在后端验证下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58290695/

相关文章:

javascript - 我们如何从js文件中获取字符串值到HTML?

javascript - jquery加载函数在firefox中抛出 "XML Parsing Error: not well-formed"错误

c# - 在 C# 中使用带有数字节点的 JSON.decode razor webhelper?

html - 在 Bootstrap 中将两个图像并排放置

javascript - 在 `replace` 函数中转义 $$

c# - 带返回值的空合并运算符 (??)

c# - 如何从 C# 调用 Jquery

c# - OrmLite.SqlServer 程序集出错

asp.net-mvc - ASP.NET MVC 在子文件夹 web.config 中忽略了 maxRequestLength 和 maxAllowedContentLength 吗?

javascript - 如何在具有 onClick 事件的组件内部仅触发一个 onClick 函数?