Сохранить как DialogBox, чтобы сохранить содержимое текстового поля в новый файл, используя asp.net - PullRequest
0 голосов
/ 17 ноября 2009

Я хочу, чтобы пользователи печатали свой текст в указанном текстовом поле, и при нажатии на кнопку createNewFile должно появиться диалоговое окно SaveAs, и пользователи должны просмотреть местоположение и сохранить файл по желанию.

Я пробовал кое-что, но
1. Диалоговое окно идет за приложением
2. При запуске диалоговое окно открывается 3 раза, значит, оно выполняется 3 раза

ОТВЕТИТЬ НА ПОЧТУ

protected void btnNewFile_Click(object sender, EventArgs e)
{
    StreamWriter sw = null;
    try
    {
        SaveFileDialog sdlg = new SaveFileDialog();
        DialogResult result = sdlg.ShowDialog();
        sdlg.InitialDirectory = @"C:\";
        sdlg.AddExtension = true;
        sdlg.CheckPathExists = true;
        sdlg.CreatePrompt = false;
        sdlg.OverwritePrompt = true;
        sdlg.ValidateNames = true;
        sdlg.ShowHelp = true;
        sdlg.DefaultExt = "txt";
        string file = sdlg.FileName.ToString();
        string data = txtNewFile.Text;

        if (sdlg.ShowDialog() == DialogResult.OK)
        {
            sw.WriteLine(txtNewFile.Text);
            sw.Close();
        }

        if (sdlg.ShowDialog() == DialogResult.Cancel)
        { sw.Dispose(); }
    }
    catch
    { }
    finally
    {
        if (sw != null)
        {
            sw.Close();
        }
    }
}

private void Save(string file, string data)
{
    StreamWriter writer = new StreamWriter(file);
    SaveFileDialog sdlg1 = new SaveFileDialog();

    try
    {
        if (sdlg1.ShowDialog() == DialogResult.OK)
        {
            writer.Write(data);
            writer.Close();
        }
        else
            writer.Dispose();
    }
    catch (Exception xp)
    {
        MessageBox.Show(xp.Message);
    }
    finally
    {
        if (writer != null)
        {
            writer.Close();
        }
    }
}

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

Ответы [ 5 ]

0 голосов
/ 17 ноября 2009

В ASP.NET нет диалогового окна SaveAs. Но вы можете заставить ваше приложение создать файл на сервере и отправить его обратно пользователю.

string userProvidedText               = uiTextBox.Text; // this is your textbox
byte[] userProvidedTextAsBytes        = null;

if (!string.IsNullOrEmpty(userProvidedText )) {
  System.Text.ASCIIEncoding encoding  = new System.Text.ASCIIEncoding();
  userProvidedTextAsBytes             = encoding.GetBytes(userProvidedText);
}

Response.AppendHeader("Content-Disposition", "attachment; filename=YourFileName.html");
Response.ContentType = "text/HTML";
Response.BinaryWrite(userProvidedTextAsBytes);
Response.End();

Когда этот код выполняется, приложения генерируют «на лету» YourFileName.html и возвращают его пользователю. В этот момент браузер перехватывает полученный результат и спрашивает пользователя, что делать с этим конкретным файлом.

альтернативный текст http://www.cyphersec.com/wp-content/uploads/2009/04/output1.png

Примечание : используйте Response.TransmitFile () , если вы хотите обслуживать ранее сохраненные файлы. Причиной этого является то, что TransmitFile очень эффективен, потому что он в основном разгружает потоковую передачу файлов в IIS, в том числе потенциально вызывает кэширование файла в ядре (на основе правил кэширования IIS).

0 голосов
/ 17 ноября 2009

Я полагаю, вы пытаетесь это сделать в Winforms env. Проблема в том, что вы делаете три вызова .ShowDialog в вашем коде, который появляется в диалоговом окне три раза. Вам просто нужно вызвать ShowDialog один раз, а затем сохранить и использовать результат только ниже

        DialogResult result = sdlg.ShowDialog();

        if (result == DialogResult.OK)            
        {                
            sw.WriteLine(data);                
            sw.Close();            
        }
        else if (result == DialogResult.Cancel)
        { 

        }
0 голосов
/ 17 ноября 2009

SaveFileDialog - это элемент управления Windows Forms, он не работает на веб-сайте.

Браузер будет отображать диалоговое окно «Что вы хотите сделать с этим файлом» всякий раз, когда сервер отправляет ему поток, который он не может обработать по умолчанию - к сожалению, большинство браузеров могут обрабатывать текстовые потоки, поэтому просто отображают пользователь.

Но что-то вроде этого должно помочь вам:

protected void btnNewFile_Click(object sender, EventArgs e)
{
   // Clear the response buffer:
   Response.Clear();

   // Set the output to plain text:
   Response.ContentType = "text/plain";

   // Send the contents of the textbox to the output stream:
   Response.Write(txtNewFile.Text);

   // End the response so we don't get anything else sent (page furniture etc):
   Response.End();
}

Но, как я уже сказал, большинство браузеров могут справляться с обычным текстом, поэтому вам может потребоваться обмануть браузер и передать тип приложения, но тогда это может ограничить полезность загрузки на некоторых машинах.

0 голосов
/ 17 ноября 2009

Как уже говорили другие, вы не можете использовать SaveFileDialog. Если вы это сделаете, он будет виден только на сервере, и пользователь никогда не сможет его увидеть. Вы можете видеть это только потому, что в вашем случае сервер и клиент совпадают.

Вы должны установить заголовок HTTP

Content-Disposition: attachment; filename=somefilename.txt
0 голосов
/ 17 ноября 2009

Вы можете взять идею по этой ссылке:
http://codingforums.com/showthread.php?t=90278

Преобразуйте это в c # и обновите для записи текста в текстовом поле.

...