在CSHTML(Razor)上命名文本文件

时间:2011-11-20 20:11:52

标签: asp.net-mvc file razor filenames text-files

我有一个页面,其中包含标题输入和正文输入的文本区域。

使用这些东西保存文本文件很简单,问题是,如何在标题输入中放置文件之后命名文件?

我试过了:

@{
      var result = "";
  if (IsPost)
  {
    var title = Request["title"];
    var body = Request["body"];

    var filedata = title + "," + body + Environment.NewLine;

    var dataFile = Server.MapPath("/App_Data/Request["title"]");
    File.WriteAllText(@dataFile, filedata);
    result = "Information saved.";
  }
}

(注意var title = Request["title"];表示它从名为“title”的文本输入请求。我想得到的是输入也将是它保存的文件的名称。

但似乎这个区域:

var dataFile = Server.MapPath("/App_Data/Request["title"]");

不正确。

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

几个指针;首先,这种逻辑应该在Controller中,而不是在View中。您的视图应显示有关您的模型的信息,您的控制器会执行操作。

其次,以下应该做的伎俩(在控制器中!):

[HttpPost]
public ActionResult SaveFile(string title, string body)
{
    var fileData = title + "," + body + Environment.NewLine;

    var fileSavePath = Path.Combine(
        Server.MapPath("~/TextFiles"), 
        title.Replace(" ", "_") + ".txt");

    File.WriteAllText(fileSavePath, fileData);

    return this.RedirectToAction("SaveSuccessful");
}

值得注意的是:

  1. Server.MapPath("~/TextFiles")为您提供了存储文件的Web应用程序根目录中TextFiles目录的路径。
  2. 我已经用标有下划线的标题替换了空格。
  3. 此方法将用户重定向到同一控制器上名为SaveSuccessful的操作
  4. 当然,你需要处理错误和各种其他事情,但希望这会有所帮助。