これは奇妙なものです。そのため、更新パネルに AsyncFileUpload という Ajax Toolkit ファイル アップローダーがあります。この AsyncFileUpload コントロールは、そこにファイルを配置するとすぐにアップロードを開始し、サーバーを呼び出します。次に、このファイルを BLOB として保存し、SELECT @@IDENTITY を使用してデータベース テーブルから行 ID を取得します。これまでのところ、行 ID があり、それを保存したいと考えています。非表示フィールド内に配置しましたが、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()); }
編集:それを説明する同様の投稿を見つけました。みんなありがとう! C# を使用して asp.net の Viewstate で値を取得できませんか?