Pedir al usuario que guarde / abra el archivo en ASP.NET C #

No debería ser tan difícil descubrir cómo hacer esto. Básicamente estoy tratando de tomar una cadena y dejar que el cliente la guarde cuando hacen clic en un botón. Debería aparecer un cuadro de diálogo Guardar / Abrir. No hay campanas y silbidos extra ni nada. No es ciencia de cohetes, (o eso hubiera pensado).

Parece que hay un montón de formas diferentes (StreamWriter, HttpResponse, etc.), pero ninguno de los ejemplos que he podido encontrar funciona correctamente o explica lo que está pasando. Gracias por adelantado.

Un ejemplo uno de los muchos bloques de código que he encontrado ...

(Esto es solo un ejemplo, siéntase libre de no basar su respuesta alrededor de esto).

String FileName = "FileName.txt";
String FilePath = "C:/...."; //Replace this
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.ClearContent();
response.Clear();
response.ContentType = "text/plain";
response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ";");
response.TransmitFile(FilePath);
response.Flush();
response.End();

La línea 2 dice reemplazar esa cadena. ¿Cómo? Este código fue anunciado como un diálogo. No debería tener que establecer una ruta en el código, ¿verdad?

EDITAR: Resultado final (Editado de nuevo, Eliminar debe ir antes de Fin ();)

        string FilePath = Server.MapPath("~/Temp/");
        string FileName = "test.txt";

        // Creates the file on server
        File.WriteAllText(FilePath + FileName, "hello");

        // Prompts user to save file
        System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
        response.ClearContent();
        response.Clear();
        response.ContentType = "text/plain";
        response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ";");
        response.TransmitFile(FilePath + FileName);
        response.Flush();

        // Deletes the file on server
        File.Delete(FilePath + FileName);

        response.End();

Respuestas a la pregunta(4)

Su respuesta a la pregunta