2011-11-20 22 views
1

我有一個頁面,帶有用於標題輸入和正文輸入的文本區域。在CSHTML上命名一個文本文件(剃刀)

用這些東西保存一個文本文件很容易,問題是,我怎樣才能使文件被命名爲標題輸入的任何內容?

我嘗試這樣做:

@{ 
     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"];意味着其名爲 「標題」 文本輸入請求)。我想得到的是輸入也將是它保存的文件的名稱。

但似乎這方面的:

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

不正確的方法。

什麼是正確的做法?

回答

1

幾個指針;首先這種邏輯應該在控制器中,而不是在視圖中。你的視圖應該顯示你的模型的信息,你的控制器執行操作。

其次,下面應該做的伎倆(在控制器!):

[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的行動,但希望幫助。