我有一个像这样的控制器:
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”
答案 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调用并显示消息,以防止对服务器进行不必要的调用)