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

时间:2018-02-07 00:00:40

标签: asp.net-mvc asp.net-mvc-5

我有一个像这样的控制器:

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";并停止所有进程

我怎样才能做到这一点?

更新

我用ajax调用调用CargaCSV方法:

 $("#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>");
            }
        });
    });

所以在这里我将数据附加到表中并将数据显示到pre html标签“resultado”

1 个答案:

答案 0 :(得分:0)

您返回JsonResult而不是ViewResult,因此设置ViewBag属性毫无意义(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>元素中添加<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);
                }
            }
        }
    });
});

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