ASP.NET Core模型在表单多次发布后会丢失值

时间:2019-06-13 07:51:46

标签: javascript c# asp.net-core asp.net-core-2.2

这是我的问题,我有一个简单的表格,该表格按步骤划分。

  • 用户键入他的电话号码
  • 发布到C​​heck数据库以获取用户数据并返回该用户可用的Celulas
  • 返回Celulas并将其附加到选择列表中,以便用户选择一个
  • 用户选择了一个,然后再次发布以获取对该Celula的推荐链接
  • 返回引荐并附加到选择列表
  • 用户选择推荐人
  • 单击提交按钮以回传整个模型

这里是问题。

首次发布时,发布了CodigoOperador属性。 当我第二次发布时,Celula具有价值,但CodigoOperador价值却丢失了 当我第三次发布时,Referencia值未发布,并且所有内容均为空

正如您在表单方法中看到的那样,我正在为此使用ajax不引人注目。

我尝试为每个输入使用多种形式,但后来我无法发布整个模型,这真是一个大混乱。

所以我的问题是,解决这个问题的最佳方法是什么?

预期结果基本上是一次输入每个输入,最后确认具有所有值的整个模型。

这是代码

视图模型

public class OperadorLoginViewModel
{
    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Operador" ,Prompt = "Operador")]
    public int? CodigoOperador { get; set; }

    [Required]
    [Display(Name = "Célula", Prompt = "Célula")]
    public int? Celula { get; set; }

    [Required]
    [Display(Name = "Referência", Prompt = "Referência")]
    public int? Referencia { get; set; }
}

html

 <form method="post"
                          data-ajax="true"
                          data-ajax-method="post"
                          data-ajax-begin="onBegin" data-ajax-complete="onComplete"
                          data-ajax-failure="onFailed" data-ajax-success="onSuccess">

                        <div class="row">
                            <div class="col-md-12">

                                <div class="form-group">

                                    <input asp-for="Operador.CodigoOperador" class="form-control custom-input" />
                                    <span asp-validation-for="Operador.CodigoOperador" class="text-danger"></span>

                                </div>

                                <div class="form-group d-none">

                                    <select asp-for="Operador.Celula" class="form-control custom-input">
                                        <option value="">Selecione uma Célula</option>
                                    </select>
                                    <span asp-validation-for="Operador.Celula" class="text-danger"></span>


                                </div>

                                <div class="form-group d-none">



                                    <select asp-for="Operador.Referencia" class="form-control custom-input">
                                        <option value="">Selecione uma Referência</option>
                                    </select>
                                    <span asp-validation-for="Operador.Referencia" class="text-danger"></span>


                                </div>

                            </div>
                        </div>

                        <div class="row">
                            <div class="col-6">

                                <button type="submit" class="btn btn-dark rounded login-button d-none" style="width:100%">
                                    <i class="fa fa-check"></i>
                                    Entrar
                                </button>

                            </div>
                            <div class="col-6">

                                <button type="button" class="btn btn-dark rounded cancel-button d-none" style="width:100%">
                                    <i class="fa fa-eraser"></i>
                                    Reset
                                </button>

                            </div>
                        </div>
                    </form>

此表单已多次发布到此函数

        public async Task<IActionResult> OnPostAsync()
        {
            if (Operador.Celula == null)
            {
                IDbConnection con = new SqlConnection(_config.GetConnectionString("ListaGeralConnection"));

                var query = @"SELECT 
                            Sector AS UAP, 
                            CASE
                                WHEN Turno = 1 THEN 'Manhã'
                                WHEN Turno = 2 THEN 'Tarde'
                                WHEN Turno = 3 THEN 'Noite'
                            END Turno
                          FROM 
                            empregados 
                          WHERE Numero = @CodigoOperador 
                          AND Estado = 'Ativo'";

                var operador = await con.QueryFirstOrDefaultAsync<OperadorViewModel>(query, new { CodigoOperador = Operador.CodigoOperador });

                //var uap = "UAP2";

                if (operador.UAP != null)
                {
                    var celulas = await _context.Celulas.Where(c => c.UAP == operador.UAP).ToListAsync();

                    if (celulas != null)
                    {
                        return new JsonResult(new { celulas = celulas });
                    }

                    return new JsonResult("Não existem células atríbuidas a este UAP.");
                }

                return new JsonResult("Este operador não existe.");
            }
            else if (Operador.Referencia == null)
            {
                var referencias = await _context.Referencias
                   .Where(r => r.Matrizes.Any(c => c.CelulaId == Operador.Celula))
                   .Select(x => new Referencia
                   {
                       Id = x.Id,
                       Nome = x.Nome
                   })
                   .ToListAsync();

                if (referencias != null)
                {
                    return new JsonResult(new { referencias = referencias });
                }

                return new JsonResult("Não existem referências nesta célula.");
            }
            else
            {
                var data = DateTime.Now.ToString("dd-MM-yyyy");

                return new JsonResult(1);
            }
        }

这是表单的javascript逻辑

    var onSuccess = function (response) {

        if (response.celulas) {
            GetCelulas(response.celulas);
        }
        if (response.referencias) {
            GetReferencias(response.referencias);
        }   
    };

  function GetCelulas(celulas) {

        var $select = $('#Operador_Celula');

        $.each(celulas, function (i, celula) {

            var option = $('<option>', {
                value: celula.id
            }).html(celula.nome).appendTo($select);

        });

        $('#Operador_CodigoOperador').prop('disabled', true);
        $('#Operador_Celula').parent().removeClass('d-none');
    }

    function GetReferencias(referencias) {

        if (referencias.length > 1) {

            var $select = $('#Operador_Referencia');

            $.each(referencias, function (i, referencia) {
                //console.log(celula);
                var option = $('<option>', {
                    value: referencia.id
                }).html(referencia.nome).appendTo($select);
                //console.log(option);
            });

            $('#Operador_Celula').prop('disabled', true);
            $('#Operador_Referencia').parent().removeClass('d-none');
        }
        else {
            swal('Atenção!','Esta Célula não tem Referências','warning');
        }
    }

0 个答案:

没有答案