代码之家  ›  专栏  ›  技术社区  ›  user9065477

如果条件为null,则停止进程并返回消息

  •  0
  • user9065477  · 技术社区  · 6 年前

    我有一个这样的控制器:

    public ActionResult CargaCSV(HttpPostedFileBase archivo)
            {
    
                List<string[]> registros = new List<string[]>();
                confService = new ConfiguracionService();
    
                if (archivo.ContentLength > 0)
                {
                    StreamReader sR = new StreamReader(archivo.InputStream);
                    string linea;
                    string resultado = "";
    
                    var f = 0;
    
                    while ((linea = sR.ReadLine()) != null)
                    {
                        if (f == 0)
                        {
                            f++;
                            continue;
                        }
                        else
                        {
                            String[] registros_ = linea.Split(',');
                            registros.Add(registros_);
                        }
                    }
                    sR.Close();
    
                    ViewBag.Message = resultado;
                    confService.GuardarMatrizCsv(registros,usuarioCaptura);
                }
    
    
                return Json(registros);
            }
    

    如您所见,我将结果返回到div中:

    ViewBag.Message = resultado;
    

    查看:

    <div class="" style="height: 150px; overflow: auto; margin-bottom:10px;">
    <pre id="resultado">@ViewBag.Message</pre>
    </div>
    

    我想做的是取消所有进程,如果 (archivo.ContentLength > 0) 返回null并返回: ViewBag.Message = "you need attach file to load it"; 并停止所有进程

    我怎样才能做到这一点?

    更新:

    我打电话 CargaCSV 使用ajax调用的方法:

     $("#btnCargarCsv").on("click", function () {
    
            var data = new FormData();
            data.append("archivo", $("#archivo")[0].files[0]);
    
            $.ajax({
                "type": "POST",
                "url": "/Configuracion/CargaCSV",
                "contentType": false,
                "processData": false,
                "data": data,
                success: function (s) {
                    var result = $("#resultado");
                    result.text("");
                    result.append("<table>");
                    result.append("<tr>");
                    result.append("<th> Unidad </th>");
                    result.append("<th> CR Mínimo </th>");
                    result.append("<th> CR Máximo </th>");
                    result.append("<th> % Mínimo </th>");
                    result.append("<th> % Máximo </th>");
                    result.append("</tr>");
    
                    for (var i = 0; i < s.length; i++) {
                        var val = s[i];
                        result.append("<tr>");
                        result.append("<td> " + val[0] + " </td>");
                        result.append("<td> " + val[1] + " </td>");
                        result.append("<td> " + val[2] + " </td>");
                        result.append("<td> " + val[3] + " </td>");
                        result.append("<td> " + val[4] + " </td>");
                        result.append("</tr>");
                    }
                    result.append("</table>");
                }
            });
        });
    

    所以在这里,我将数据附加到表中,并将数据显示到html前的标记“resultado”中

    1 回复  |  直到 6 年前
        1
  •  0
  •   user3559349 user3559349    6 年前

    您返回的 JsonResult ,不是 ViewResult ,因此设置 ViewBag 属性没有意义( 查看包 用于将数据传递给 View )还有你的

    <pre id="resultado">@ViewBag.Message</pre>
    

    元素将只显示 ViewBag.Message 第一次呈现页面时。

    您需要在 JsonResult公司 并用ajax成功方法对其进行测试。

    更改控制器代码以根据您的情况返回不同的值

    public ActionResult CargaCSV(HttpPostedFileBase archivo)
    {
        if (archivo.ContentLength =  0)
        {
            string message = "you need attach file to load it";
            return Json( new { message = message });
        }
        .... // your code to process the file
        return Json(new { registros = registros });
    }
    

    并更改成功回调中的代码以测试结果

    success: function (data) {
        if (data.message) {
            $('#resultado').text(data.message);
        } else if (data.registros) {
            var result = $("#resultado");
            ....
            for (var i = 0; i < data.registros.length; i++) {
                var val = data.registros[i];
                ....
            }
            result.append("</table>");
        }
    }
    

    作为补充说明,您可以通过生成 <table> 及其标题(应在 <thead> 元素),并使用 display: none; 只需添加 <tr> its内部的元素 <tbody> 元素(然后在成功回调中显示/隐藏该表),例如

    <table id="resultstable" style="display:none">
        <thead>
            ....
        </thead>
        <tbody id="results"></tbody>
    <table>
    

    剧本

    var table = $('#resultstable');
    var results = $('#results');
    var message = $('#resultado');
    
    $('btnCargarCsv').on('click', function () {
        ....
        $.ajax({
            ....
            success: function (data) {
                if (data.message) {
                    message.text(data.message);
                    table.hide();
                } else if (data.registros) {
                    results.empty(); //remove any existing rows
                    table.show();
                    for (var i = 0; i < data.registros.length; i++) {
                        var val = data.registros[i];
                        var row = $('<tr></tr>');
                        for(int j = 0; j < val.length; j++) {
                            row.append($('<td></td>').text(val[j]));
                        }
                        results.append(row);
                    }
                }
            }
        });
    });
    

    此外,您应该测试文件输入的值是否为 null 在进行ajax调用之前(如果是,则取消ajax调用并显示消息),以防止对服务器进行不必要的调用。