2017年2月28日火曜日

[ASP.NET]RadioButtonListでNULLの値がセットできない時の回避法

エラー内容:
追加情報:項目一覧に存在しないため、'rdo******' に SelectedValue を指定することは無効です。

NULLはありえないデータだから…ということなのか。回避方法としては以下をおこなった。
①NULLの選択肢をダミーで用意する。  データセットするSQL文を以下の様にしてUNION ALL でダミーを作る。  (最初に作らないと後がややこしいのでデータ段階から行うのがよい SELECT '' as val, '' as tmp UNION ALL SELECT CAST([情報値] AS varchar) , [情報1] FROM M_マスタ ②【rdo_DataBound_NullDisplayNone】等の関数を介してNULLの選択肢を見えなくする。 aspx <asp:RadioButtonList id="rdotest" OnLoad="rdo_DataBound_NullDisplayNone" … cs protected void rdo_DataBound_NullDisplayNone(object sender, EventArgs e) { var rdolst = (RadioButtonList)sender; foreach (ListItem item in rdolst.Items) { if ((item.Value ?? "") == "") { item.Attributes.Add("style", "display:none;"); item.Enabled = false; } } } これでNULL値をセットしてもエラーがでなくなった。

2017年2月24日金曜日

[ASP.NET]AjaxToolKitのAjaxFileUploadがうまく動かない時の対応

AJAXToolkitのAjaxFileUploadが、開発環境ではうまくいっていたのに動かなかった。
アップロードが"UploadComplete"になる前にNGになる…。

以下、Web.ConfigやIISに対して行ったまとめ。

-----------------------------------------------------------------
 ①開発時からWen.Configに以下の様なイベントハンドラを追加。
<system.web>
  <httpHandlers>
    <add verb="*" path="AjaxFileUploadHandler.axd" type="AjaxControlToolkit.AjaxFileUploadHandler, AjaxControlToolkit" />
  </httpHandlers>
</system.web>
<system.webServer>
  <handlers>
    <add name="AjaxFileUploadHandler" verb="*" path="AjaxFileUploadHandler.axd" type="AjaxControlToolkit.AjaxFileUploadHandler, AjaxControlToolkit" />
  </handlers>
</system.webServer>
これがないと開発の段階ですらどうあがいてもNG。
  http://stackoverflow.com/questions/17051845/ajaxfileupload-error


②その後サーバに移管した時にうまくいかず…。
 IIS7以上はこっちというからsystem.webserver内をこっちの書き方にした
<validation validateintegratedmodeconfiguration="false" />
<handlers>
    <add name="AjaxFileUploadHandler" verb="*">
      path="AjaxFileUploadHandler.axd"
      type="AjaxControlToolkit.AjaxFileUploadHandler, 
      AjaxControlToolkit"/>
</add></handlers>
  役にたったか否かは不明…。
 https://www.codeproject.com/Questions/773110/AjaxFileUpload-server-events-not-firing

③とりあえず仮想ディレクトリに権限与えまくった
  このサイトよかった。
 https://creativeweb.jp/tips/iis_acl/

④それでもうまくいかず。
 アプリケーションプールが統合モードならこう書けとあったから
 上記の書き方に、preCondition="integratedMode" を追加した。
 (「preCondition="integratedMode"」と書いてあるトコ参照)
http://stackoverflow.com/questions/22706303/ajaxfileupload-not-working-in-iis-7-5-and-later 

⑤それでもうまくいかず。
 よくわかんなかったが以下のサイトを見てASPXのコードのトコで
  UseAbsoluteHandlerPath="false" を加えた  
 アドレスがなんたららしいけど… 関係なさそうに見えたのにこれだったかも
https://github.com/DevExpress/AjaxControlToolkit/issues/43

-----------------------------------------------------------------
 以上でうまくいった!