【问题标题】:How do I get details from ViewBag into a string for use in FileStreamResult?如何将 ViewBag 中的详细信息转换为用于 FileStreamResult 的字符串?
【发布时间】:2020-05-02 16:04:06
【问题描述】:

你好聪明的编码人员, 我正在为大学做一个 MVC 项目,我正在尝试输出发票,我不需要查看发票,只需创建一个可下载的文本文件。 我一直在尝试使用 StringBuilder 从 ViewBag 获取详细信息,但它们没有被写入文件中。我正在使用 @HtmlActionLink 从视图中创建它。我确信我在做一些愚蠢的事情,任何建议将不胜感激。 谢谢一百万。

我的控制器中的方法:

public FileStreamResult Invoice()
    {
        StringBuilder sb = new StringBuilder("Your Invoice");

        sb.AppendLine(" ");
        sb.AppendLine("Id:"+ @ViewBag.ClientId);
        sb.AppendLine("Name:" + @ViewBag.Name);
        sb.AppendLine("Total:" + @ViewBag.Total);

        var invoiceDetails = sb.ToString();

        var byteArray = Encoding.ASCII.GetBytes(invoiceDetails);
        var stream = new MemoryStream(byteArray);


        return File(stream, "text/plain", "Invoice.txt");

    }

【问题讨论】:

  • 嗨,Esther,您是否尝试从您的网页中发布 ClientId、Name 和 Total?或者如果不是,这些是从哪里来的?
  • 它们来自天蓝色数据库
  • 在这种情况下,ViewBag 不是在后端传输数据的最佳方式。您需要考虑创建一个模型来表示数据(类),然后在您的操作中使用这些模型。我会尽快发布答案
  • 哎呀!抱歉,我可能也应该发布我的模型类。我应该发布指向我的 GitHub 存储库的链接吗?
  • 是的,去吧。应该更容易看到。

标签: c# model-view-controller stringbuilder filestreamresult


【解决方案1】:

您可以将参数、调用的 ID 传递到下载调用的操作中。

带ID参数的发票下载操作链接:

@Html.ActionLink("Download invoice", "Invoice", "MyController", new { id = @Model.InvoiceId }) 

@Model.InvoiceId 来自显示发票的视图模型。

控制器动作:

public FileStreamResult Invoice(int id)
{
    ...
}

【讨论】:

    猜你喜欢
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多