Наименование текстового файла в CSHTML (Razor) - PullRequest
1 голос
/ 21 ноября 2011

У меня есть страница с текстовой областью для ввода заголовка и основного текста.

Сохранение текстового файла с этими вещами легко, вопрос в том, как сделать так, чтобы файл был назван в честь того, что было помещено в заголовок?

Я пробовал это:

@{
      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 Ответ

1 голос
/ 21 ноября 2011

пара указателей; во-первых, такая логика должна быть в контроллере, а не в представлении. Ваши представления должны отображать информацию о вашей модели, ваши контроллеры выполняют операции.

Во-вторых, следующее должно быть сделано (в контроллере!):

[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") дает вам путь к каталогу TextFiles в корне вашего веб-приложения, где будут храниться файлы.
  2. Я заменил пробелы в названии, которое было введено подчеркиванием.
  3. Этот метод перенаправляет пользователя к действию с именем SaveSuccessful на том же контроллере

Конечно, вам нужна обработка ошибок и всякие другие вещи, но, надеюсь, это поможет.

...