ASP.NET FileUpload: как автоматически отправить назад, как только файл выбран?

Есть 3 способа сделать это, но решение этого зависит от типа данных, которые вы хотите передать между сценами. Компоненты / скрипты и GameObjects уничтожаются при загрузке новой сцены и даже при маркировке как static.

1. Используйте ключевое слово static.

Используйте этот метод, если переменная для перехода к следующей сцене не является компонентом, не наследуется от MonoBehaviour и не является GameObject затем сделайте переменную равной static.

Встроенные примитивные типы данных, такие как int, bool, string, float, double. Все эти переменные могут быть сделаны переменной static.

Пример встроенных примитивных типов данных, которые могут быть отмечены как статические:

static int counter = 0;
static bool enableAudio = 0;
static float timer = 100;

Они должны работать без проблем.


Пример объектов, которые может быть отмечен как статический:

public class MyTestScriptNoMonoBehaviour
{

}

, затем

static MyTestScriptNoMonoBehaviour testScriptNoMono;

void Start()
{
    testScriptNoMono = new MyTestScriptNoMonoBehaviour();
}

Обратите внимание, что класс не наследуется от MonoBehaviour . Это должно работать.


Пример объектов, которые не может быть помечены как статические:

Все, что наследуется от Object , Component или GameObject не будет работать.

1A. Все, что наследуется от MonoBehaviour

public class MyTestScript : MonoBehaviour 
{

}

then

static MyTestScript testScript;

void Start()
{
    testScript = gameObject.AddComponent();
} 

Это не будет работать, потому что оно наследуется от MonoBehaviour .

1B.All GameObject :

static GameObject obj;

void Start()
{
    obj = new GameObject("My Object");
}  

Это не сработает, потому что это GameObject и GameObject наследуются от Object .

Единство всегда будет уничтожать его Object , даже если они объявлены с ключевым словом static.

См. № 2 для обходного пути.


2.Используйте функцию DontDestroyOnLoad .

Вам нужно использовать это, только если данные сохранить или перейти к следующей сцене наследует от Object , Component или является GameObject . Это решает проблему, описанную в 1A и 1B.

Вы можете использовать ее, чтобы этот GameObject не уничтожался при выгрузке сцены:

void Awake() 
{
    DontDestroyOnLoad(transform.gameObject);
}

Вы даже можете использовать его с ключевыми словами static решить проблему из 1A и 1B:

public class MyTestScript : MonoBehaviour 
{

}

then

static MyTestScript testScript;

void Awake() 
{
    DontDestroyOnLoad(transform.gameObject);
}

void Start()
{
    testScript = gameObject.AddComponent();
} 

Теперь переменная testScript будет сохранена при загрузке новой сцены.

3. Сохраните локальную память, затем загрузите ее во время следующей сцены.

Этот метод следует использовать, когда это данные игры, которые необходимо сохранить, когда игра закрыта и снова открыта. Пример этого - высокий балл игрока, настройки игры, такие как громкость музыки, местоположения объектов, данные профиля джойстика и т. Д.

Thare - два способа сохранить это:

3A. Используйте API PlayerPrefs .

Используйте, если у вас есть только несколько переменных для сохранения. Скажем, оценка игрока:

int playerScore = 80;

И мы хотим сохранить playerScore:

Сохранить оценку в функции OnDisable

void OnDisable()
{
    PlayerPrefs.SetInt("score", playerScore);
}

Загрузить в функции OnEnable

void OnEnable()
{
    playerScore  =  PlayerPrefs.GetInt("score");
}

3B. Сериализуйте данные в форму json, xml или binaray, затем сохраните с помощью одного из файлов API C #, таких как File.WriteAllBytes и File.ReadAllBytes для сохранения и загрузки файлов.

Используйте этот метод, если есть много переменных для сохранения.

Общие сведения, вам необходимо создать класс, который не наследуется от MonoBehaviour . Этот класс, который вы должны использовать для хранения ваших игровых данных, чтобы их можно было легко сериализовать или де-сериализовать.

Пример данных для сохранения:

[Serializable]
public class PlayerInfo
{
    public List ID = new List();
    public List Amounts = new List();
    public int life = 0;
    public float highScore = 0;
}

Возьмите класс DataSaver, который является оберткой поверх File.WriteAllBytes и File.ReadAllBytes , который упрощает сохранение данных из этого сообщения .

Создать новый экземпляр:

PlayerInfo saveData = new PlayerInfo();
saveData.life = 99;
saveData.highScore = 40;

Сохранить данные из PlayerInfo в файл с именем «игроки»:

DataSaver.saveData(saveData, "players");

Загрузить данные из файла с именем «игроки»:

PlayerInfo loadedData = DataSaver.loadData("players");

26
задан Jason Miesionczek 15 December 2008 в 01:05
поделиться

2 ответа

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

<!-- HTML code --->
<input 
  type="file" 
  onchange="if (confirm('Upload ' + this.value + '?')) this.form.submit();"
>

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

23
ответ дан Tomalak 25 September 2019 в 07:38
поделиться

Первый ответ имел правильный JavaScript, но ASP.NET не обязательно представляет элемент управления вводом непосредственно, таким образом, лучше поместить onchange событие на управление FileUpload.

<asp:FileUpload ID="myFileUpload" onchange="if (confirm('Upload ' + this.value + '?')) this.form.submit();" runat="server" />

Другой маршрут для движения должен обеспечить богатую загрузку через flash/silverlight/ajax. Большой компонент для этого может быть найден в Загрузчик Ajax приблизительно за 100$

15
ответ дан E. Earl 25 September 2019 в 07:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: