MVC5如何从控制器发送字符串到视图?

时间:2016-06-23 16:13:34

标签: asp.net-mvc controller

我有一个试图下载文件的控制器,如果文件失败我想向视图发送一个字符串来显示错误。我试图用TempData来完成这个,我遇到了一些麻烦。错误显示文件无法下载,但文件成功下载后,错误消息不会消失。我可能做错了什么?

控制器

        if (can_download)
        {

            Response.ContentType = contentType;
            Response.AppendHeader("Content-Disposition", string.Format("attachment; filename={0}", filename));
            Response.TransmitFile(path);
            Response.End();
        }
        else
        {
            TempData["AlertMessage"] = "File failed to save";

        }
        return RedirectToAction("Index", page);

查看

@{
    var message = TempData["AlertMessage"];
}

<p class="error-msg">@message</p>

@section scripts {
    var message = '@message';
    if (message){
         $('.error-msg').css('opacity', 100); // show message
    }else{
         $('.error-msg').css('opacity', 0); // hide message
    }
}

1 个答案:

答案 0 :(得分:1)

如果文件生成成功,则必须清除TempData。

在上一个错误中,没有消耗TempData。

if (can_download)
    {

        Response.ContentType = contentType;
        Response.AppendHeader("Content-Disposition", string.Format("attachment; filename={0}", filename));
        Response.TransmitFile(path);
        Response.End();

        TempData["AlertMessage"] = string.Empty;

    }
    else
    {
        TempData["AlertMessage"] = "File failed to save";

    }
    return RedirectToAction("Index", page);

查看

@{
    var message = TempData["AlertMessage"] as string;
}

@if (!string.IsNullOrEmpty(message)) {
 <p class="error-msg">@message</p>

@section scripts {
    var message = '@message';
    if (message){
     $('.error-msg').css('opacity', 100); // show message
    }else{
     $('.error-msg').css('opacity', 0); // hide message
    }
  }
}