Это странно. Итак, у меня есть загрузчик файлов Ajax Toolkit под названием AsyncFileUpload, расположенный на панели обновлений. Этот элемент управления AsyncFileUpload, как только вы кладете туда файл, начинает его загружать и звонит на сервер. Затем я сохраняю этот файл как BLOB и получаю идентификатор строки из таблицы базы данных, используя SELECT @@IDENTITY. Пока все хорошо, теперь у меня есть идентификатор строки, и я хочу его сохранить. Я поместил его в скрытое поле, но когда AsyncFileUpload вызывает OnClientUploadComplete, скрытое поле остается пустым! Поэтому я подумал: «Хорошо, я просто сохраню его в ViewState». К моему большому удивлению, произошло то же самое; состояние просмотра очищается. Наконец, мне удалось использовать переменную сеанса. Мой вопрос: почему переменная Session работает, а ViewState или HiddenField — нет?
ПЕРЕДНИЙ:
<script type="text/javascript">
function UploadComplete(sender, args) {
var fileSize = args.get_length();
if (fileSize > 2000000) {
alert("Logo size must be smaller than 2MB");
}
$("[id*=hfUploadSuccessful]").val("1");
//Calls a postback and thus lvMembers_PreRender gets executed to get results
__doPostBack('<%=UpdatePanel1.ClientID %>', null);
}
</script>
<div id="divClassFileUpload">
<asp:AsyncFileUpload ID="AsyncFileUpload1" runat="server" Width="350" CssClass="FileUploadClass floatLeft"
UploaderStyle="Modern"
CompleteBackColor="Lime"
ErrorBackColor="Red"
ThrobberID="Throbber"
UploadingBackColor="#66CCFF"
OnClientUploadError="uploadError"
OnClientUploadStarted="StartUpload"
OnClientUploadComplete="UploadComplete"
OnUploadedComplete="AsyncFileUpload1_UploadedComplete" />
</div>
НАЗАД:
protected void AsyncFileUpload1_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e) { //hfSelectedArticleId.Value = dt.Rows[0]["ArticleId"].ToString()); //ViewState.Add("ArticleId", dt.Rows[0]["ArticleId"].ToString()); Session.Add("ArticleId", dt.Rows[0]["ArticleId"].ToString()); }
РЕДАКТИРОВАТЬ: Нашел аналогичный пост, который как бы объясняет это. Спасибо всем! Не получает значение в Viewstate в asp.net с использованием C#?
static
и присвоили его этому, оно должно сохранить свое значение независимо от того, завершит ли ваш код свое выполнение (и, возможно, впоследствии избавится от себя, кто знает?). - person aevitas   schedule 11.07.2013