【質問】ASP.NETスレ Part5【議論】at PHP
【質問】ASP.NETスレ Part5【議論】 - 暇つぶし2ch136:nobodyさん
09/05/01 13:32:14
そうなるとITemplateインターフェースを知って勉強がしたくなるよね
URLリンク(codezine.jp)

まーphpとかclassaspのようなwebとして考えるんじゃなくて
windowsformの気持ちで取り組んだほうがいいのかもしれない




137:nobodyさん
09/05/01 13:53:38 2Yd9vHgr
Repeaterの情報ありがとう。
入れ子も出来るみたいだし、それなりに使えるかも。
ただ、繰り返し中の条件分岐を作るのは面倒くさそう。

Panelの表示・非表示は思いついたけど、
Panelって<div>タグに置換されるからちょっといやな感じ。
中身は出力するけど、<div>タグには置換されないならありかも。


><% for (int i = 1; i < 10; i++) {%>
上記の使い方が出来ないと思い込んでいたけど、
今日試してみたら出来た。
色々検索して探しても、そんな情報が見つからなかったからな。
みんな使っていないって事か?


>コードビハインドでコードをデザイナーがどうこうとか考え方がまちがってる
もちろん、コードビハインドにHTMLタグが一切出てこないようにしたいです。
HTML出力のためにプログラマに負担がいくのはちょっと…てな感じです。

138:nobodyさん
09/05/01 13:54:29 2Yd9vHgr
とりあえず、
コードビハインドにパブリックな Hashtableを持たせて、
出力するデータを全て突っ込んで出力することにしました。(邪道?)

↓こんな感じ
<% if value("flg") then %>
<%= value("data") %>
<% end if %>

<% for each i as string in value("list") %>
<%= string %>
<% next %>


フリーでテンプレートエンジンもあるようなので、
時間があったら試してみたいです。

139:nobodyさん
09/05/01 14:56:32
邪道というか、.NET以前のasp的なやり方だな
旧aspの頃にはよくやってた

>もちろん、コードビハインドにHTMLタグが一切出てこないようにしたいです。
>HTML出力のためにプログラマに負担がいくのはちょっと…てな感じです。
逆だ。デザイナーに一切のコード見せなくするのが狙い
まあ、プログラマーが一切html触らないのは理想だが、
これはさすがにちょっと無理が多いからな

ホントは、htmlのレンダリングに関することは、コントロール作成者の役割で
プログラマの役割じゃない、ってのが理想形なんだろうな。
(まあコントロール作成者はプログラマなんだがw)
asp.netのコントロールはレンダリング相手によって出力するhtml変えるからな

少なくとも
><% if value("flg") then %>
><%= value("data") %>
><% end if %>
これは関数化してこの前後のif、end if文ぐらいはコードビハインドに入れてくれと思う


140:nobodyさん
09/05/01 15:03:27
panelがdivになるのが嫌だったら、
<table id="table1" runat="server">
にしてコードビハインドで
this.table1.Visible = false
でもいいんでないかな

あと、よほど遠回りになるなら別だけど
多少のことなら「面倒」を理由に避けるのはいかんと思うw

141:nobodyさん
09/05/01 15:40:26
ASP.NETでテンプレートエンジン使うくらいなら、
ASP.NET MVCを使う方が良いと思う。

142:nobodyさん
09/05/01 15:52:57 2Yd9vHgr
>逆だ。デザイナーに一切のコード見せなくするのが狙い
理想はそうですよね。
上部に <% Page Language=… とかすら無くしたいものです。

<asp:****>
みたいなタグが出てくるとデザインを変更しづらくなるので、
なるべく避けたいところです。

>これは関数化してこの前後のif、end if文ぐらいはコードビハインドに入れてくれと思う
このいい方法がおもいつかないです。

例えば動的にアンカーの表示・非表示とURLとアンカーテキストを表示する場合、
どういった感じになるのですかね。
<a href="*****">*****</a>

現在はこんな感じです。
<% if value("hoge") then %>
<a href="<%= value("hoge_url") %>"><%= value("hoge_name") %></a>
<% end if %>

143:nobodyさん
09/05/01 16:16:42
だから、従来のASPやPHPの方法論を頭から全く捨てて、ASP.NETという新しい概念として理解しないとだめ
動的にアンカーの表示非表示を行うならこうすればいい

protected void Button1_Click(object sender, EventArgs e)
{
 if (DateTime.Now.Month == 5)
 {
  this.HyperLink1.NavigateUrl = @"URLリンク(www.yahoo.co.jp)";
  this.HyperLink1.Text = DateTime.Now.Month.ToString()+ "月";
  this.HyperLink1.Visible = true;
 }
}

144:nobodyさん
09/05/01 17:16:36 2Yd9vHgr
>動的にアンカーの表示非表示を行うならこうすればいい
こういった概念などはわかるんだけど、
デザイナとの分業を考えたときに難しいかなと。

例えばデザイナがアンカーテキストに taget="_blank" を
入れたい場合、わざわざプログラマーに頼む感じになると難しいです。

145:nobodyさん
09/05/01 17:40:36
>例えばデザイナがアンカーテキストに taget="_blank" を入れたい場合、わざわざプログラマーに頼む感じになると難しいです。

デザイナがタグをこうするだけじゃん
<asp:HyperLink ID="HyperLink1" runat="server" Target="_blank">HyperLink</asp:HyperLink>


146:nobodyさん
09/05/01 17:42:10
いやだから、taget="_blank"したいならaspxファイルにそう書いとけばいいだけ
ブログラマ全く関知する必要ないんだが?
asp.netのコントロール使うのが嫌なら、
<a>タグにrunat="server"って書いといてもらえば、コードビハインドでどうとでもできるだろ

関数化する例は>>130がそのままだろ。VBなら
funciton hoge() as string
if value("flg") then
return value("data")
else
return ""
end if
end funciton
こんな感じか。
んでaspxに
<%= hoge() %>
だけかいときゃいい。余分なコード見せる必要ないだろ
未検証だから間違っててもしらね
理想はこういったものはコントロールにするんだよ。
そうすれば、デザイン画面に表示するものも自分で設定できるから


147:nobodyさん
09/05/01 17:53:56
>>146
<a href="test.html" id="anchor" runat="server" target="_blank">123</a>
でもいけるからね

お好きな方でドゾー

<form id="form1" runat="server">
 <div>
  <asp:HyperLink ID="HyperLink1" runat="server" Target="_blank">HyperLink</asp:HyperLink>
  <a href="test.html" ID="Anchor1" runat="server" target="_blank">Anchor</a>
 </div>
</form>


if (DateTime.Now.Month == 5)
{
 this.HyperLink1.NavigateUrl = @"URLリンク(www.yahoo.co.jp)";
 this.HyperLink1.Text = DateTime.Now.Month.ToString() + "月";
 this.HyperLink1.Visible = true;

 this.Anchor1.HRef = "URLリンク(www.yahoo.co.jp)";
 this.Anchor1.InnerText = DateTime.Now.Month.ToString() + "月";
 this.Anchor1.Visible = true;
}


148:nobodyさん
09/05/01 18:43:59 2Yd9vHgr
><a href="test.html" id="anchor" runat="server" target="_blank">123</a>
なるほど、runat="server"をつければ変更出来るのですね。
勉強になります。


ASPタグを使わずにHTMLタグの繰返しを行う場合は、
Repeaterを使うのがベストですかね?

149:nobodyさん
09/05/01 19:24:31
本を一冊買えば分かることを

150:nobodyさん
09/05/01 19:54:38
Repeaterがいいんじゃない
ASP.NETの実践的な本は少ないからね。

151:nobodyさん
09/05/01 20:09:09
Repeaterタグの表現にaspタグが必要だから、どんな場合でも不可能

それより、なんでデザイナに対してそこまで気を遣わなければならないかを
記述したほうがもっと良い解決方法が浮かぶと思う

152:nobodyさん
09/05/01 21:04:22
んー。
ASP.NETはPHPと大きく違うよねー。
PHPだとHTMLに埋め込むだけだし、
Dreamweaverも対応しているからデザイナと作業しやすいんだよね。

153:nobodyさん
09/05/01 21:11:41
DreamWeaverはASP.NETも対応してて、普通にASP.NETのタグを出力するぞ?

>PHPだとHTMLに埋め込むだけだし、
それもできるよ?


154:nobodyさん
09/05/01 21:16:03
ああ、そうなんだ。知らなかった。
じゃあ、なんでコラボしにくいのかなぁ。

155:nobodyさん
09/05/01 21:21:36
そもそも本当に、コラボしにくいのか?

156:nobodyさん
09/05/01 21:23:30
CSSは当てにくいよね

157:nobodyさん
09/05/01 21:32:25
何がどうあてにくいんだ?

158:nobodyさん
09/05/01 21:45:47
サーバーコントロール使うと、長いIDが生成されない?

159:nobodyさん
09/05/01 21:51:57
それとCSSと何の関係があるんだ?

160:nobodyさん
09/05/01 22:55:30
IISの話もここでいいかな?

161:nobodyさん
09/05/02 00:12:57
TechNetのフォーラムでいいんじゃない?とは思う

162:nobodyさん
09/05/02 00:14:45
2chには2chの良さがw

163:nobodyさん
09/05/02 00:39:28
ASP.NETのアプリでSessionを利用しているのですが、
時々タイムアウトしていないのに不意にセッション記憶値が
消える事がありこれを解決したいと思っています。
InProcで動かしているのでワーカープロセスがリサイクルしている
せいと思うのですがリサイクルのイベントログを仕込んでも
なにもログがでません。
他に何か思いつくことがありますでしょうか?

環境
・Windows2003、IIS6、DotNet1.1
・IISの設定画面でワーカープロセスがリサイクルしそうなのを
すべてOFFした。
・DotNet1.1、VS2003でビルドしたアプリをデプロイ

長文すみません。

164:nobodyさん
09/05/02 00:43:29
リサイクルのイベントログってどうやってとってる?
パフォーマンスカウンタで確認してるか

165:nobodyさん
09/05/02 00:45:37
これです、よろしくお願いいたしまーす

URLリンク(technet.microsoft.com)

166:nobodyさん
09/05/02 05:13:03
まずはステートサーバで稼働してプログラムやデバッグ環境に問題がないか確認したほうがいい

167:nobodyさん
09/05/03 01:07:20
>>158
必ずしも長いIDが生成されるわけではないが、場合によっては
.aspxファイルに指定したIDと出力されたhtmlのIDが一致しない
たとえばリピーターなんかでそのタグを繰り返すと、
識別できるように繰り返されたタグに個別のIDが振られる

>>159
ID指定でCSS適用させてると問題になるかもな
後はサーバコントロールがプロパティからCSS生成したりしやがる時があったような気が


168:nobodyさん
09/05/03 01:17:48
>>163
思いつくことってのはセッションが消える理由か?
クライアントかプロキシがセッションクッキーぽいしてるんじゃね

169:nobodyさん
09/05/03 11:14:18
>167
わかりやすい説明だね。
マスターページの時もIDが長くなるよね。

こんな記事があるということはCSSが簡単ということはないんじゃない。

「ASP.NET 2.0を使ってCSS対応のWebサイトを作成する」
URLリンク(japan.internet.com)

170:nobodyさん
09/05/03 11:17:11
CSS Friendly Control Adaptersは以下に引っ越したのかな?
URLリンク(www.codeplex.com)

171:nobodyさん
09/05/03 14:26:23
>>169
いや簡単だと思うよ
ID指定しなければいいだけ。普通にclass=""でCSSクラスを適用すればスタイルシートが適用される

172:nobodyさん
09/05/03 22:40:49
ASP.NETを特殊なものと思い込みすぎだろ
吐き出し方にクセはあるとしても結局はただのHTMLとJavaScript・CSSで組み合わさったページ作るだけじゃないか



173:nobodyさん
09/05/04 13:12:06
ポトペタだけで構築して、出来上がったソースを見もしないやつらが多いということだな

174:nobodyさん
09/05/04 15:41:59
>172
その吐き出し方が気持ち悪いと思う人も多い

175:nobodyさん
09/05/04 16:24:55
一度でもサーバコントロールを自作してみれば、
中身はただとResponse.Write(html)なのが理解できるのにな

176:nobodyさん
09/05/04 16:28:46
コードビハインドをシンプルにするために、JavaScriptをaspxに埋め込みたい。
けれどマスタページ構成なんかで各ASP.NetコントロールのIDなんかをFindControlして
ClientIDプロパティでひっぱってこないとJavaScriptで使えるIDを取得できない。

なのでコードビハインド上でJavaScriptの文字列を動的に出力する形にしてるんですけど
もっと賢いやり方ありませんか?

そもそもaspxにJavaScript書くのはデザイナさんがいやがる?


177:nobodyさん
09/05/04 16:38:46
>>176
具体的に何がしたいの?
イベント発生元のコントロールと、イベントトリガーと、
何のコントロールのどのプロパティを操作したいのかが知りたい

178:176
09/05/04 17:37:01
失礼しました。

たとえば1~10の数値が選択できるDropDownList(ASPコントロール)が3つあって、
それぞれに選択された数値の合計が10以内かどうかを、ユーザ側環境でチェックするJavaScriptです。

チェックトリガはDropDownListのonChangeです。
このとき、DropDownListコントロールのIDはASP.NET側が生成してしまうため、
aspxファイルにJavaScriptを書く際のIDをどのように持ってくるのかなと思いまして。。

aspxにJavaScript置いて、コントロールのIDは<%= %>で参照するのが普通ですか?
コントロールが3つ程度ならいいのですが、20個、30個を想定した場合はどうなんでしょう?

179:nobodyさん
09/05/04 19:31:57
>>178
DropDownListのOnChangeで、合計値を出すってことかな?
そしたら、functionで、それぞれがOnChangeする度に足したり引いたりするスクリプトを書いて、
自分自身をfunction(this)とでもして渡せばいいんじゃない?
別に自分自身のID知らなくても計算可能だと思うが

180:nobodyさん
09/05/04 20:14:47
サンプルかいてみたぞい
<script type="text/javascript" src="prototype-1.6.0.3.js"></script>
<script language="JavaScript">
var arrayid = new Array();
var arraynum = new Array();
function nullpo(drop){
 if (arrayid.indexOf(drop.id) == -1)
 {
  arrayid.push(drop.id);
  arraynum.push(drop.value);
 }
 else
 {
  arraynum[arrayid.indexOf(drop.id)] = drop.value;
 }
 var sum = 0;
 for (i=0; i< arraynum.length; i++)
 {
  sum = sum + parseInt(arraynum[i]);
 }
 alert(sum);
}
</script>


181:nobodyさん
09/05/04 20:15:40
<body>
<select id="drop1" OnChange="nullpo(this);">
<option value="0">0
<option value="1">1
<option value="2">2
<option value="3">3
</select>
<select id="drop2" OnChange="nullpo(this);">
<option value="0">0
<option value="1">1
<option value="2">2
<option value="3">3
</select>
</body>

182:nobodyさん
09/05/04 20:17:00
これならdropdownlistが何個になろうが、OnChange="nullpo(this);"を記述するだけ
protorypeかjqueryあたりのハッシュテーブル使えばもっと楽にできるかもしれん

183:nobodyさん
09/05/04 20:29:28
問題はデザイン時に指定しているIDと
実際に動作しているときに出力されるIDが違う、ってことなんだよな

CSSならクラス指定でいいかもしれないが、スクリプトになると問題がある
で、解決方法とすれば、実行時にスクリプト書きかえるか
なるべくID指定しなくて済むようにスクリプト組むぐらいしかないのかと

ClientIDを決定するロジックを自分で決められればいいと思うんだが
そんなことできないかな?


184:176
09/05/04 21:07:27
>>180-182
ありがとうございます。ASPで云々ではなくJavaScript側で対応ですか。
参考になります

>>183
CSSもIDとclassで書式が違うので問題になったりしますね。
「なんでIDで指定できないの?」みたいな

ExpressionWebってこの辺を解決してくれたりするんですかね?

185:nobodyさん
09/05/04 21:32:36
>>183
おそらく無理

>子コントロールをページにレンダリングするコントロールもあります。
>このような親コントロールは名前付けコンテナであり、INamingContainer を実装します。
>名前付けコンテナを含むページをブラウザに表示すると、
>名前付けコンテナの子コントロールの name 属性と id 属性に一意の ID が指定されていることをページ ソースで確認できます。
>ただし、ブラウザで表示される ID を直接参照することはお勧めしません。
>子コントロールに対して一意の ID を生成する式は変更されることがあります。
>代わりに、子コントロールの ClientID プロパティの値を取得し、
>この値を使用して子コントロールを参照します。

>たとえば、ページ内に動的にクライアント スクリプトを作成する場合があります。
>クライアント スクリプトが子コントロールを参照する場合、
>子コントロールの ClientID プロパティを取得して動的なスクリプトに組み込みます。

URLリンク(msdn.microsoft.com)(VS.80).aspx

186:nobodyさん
09/05/04 23:41:14
>>183
>CSSならクラス指定でいいかもしれないが、スクリプトになると問題がある

それで、JQueryが出てきたんでは?
どこまで、使えるのか、まだ試してないが。

187:nobodyさん
09/05/04 23:49:24
>>186
そうだjquery勉強しようと思ってたんだった
どんどん新しいテクノロジが出てきておいつかないよね

asp.net勉強して、C#でジェネリクスとかでてきて勉強して、
そう思ったらajaxでてきて、SQL/CLRもやんなきゃってなって、
LinqToEntityキタ━━(゚∀゚)━━!!、ラムダ式がきたっちゃになって、
今度はリッチクライアントでsilverlightですか?(´Д⊂グスン いまここ

188:nobodyさん
09/05/04 23:53:52
jQueryで作るAjaxアプリケーション
は良い本だった。

189:nobodyさん
09/05/05 00:01:46
サーバサイドの実装がめんどくさそう
asp.net ajaxはポトペタだしすごい便利なんだよな

190:nobodyさん
09/05/05 00:47:31
>>186
JQuery詳しく知らないが、普通の一般的なスクリプトのライブラリじゃないの?
JQuery使うとIDに依存しない実装できるってんなら話は別だが
今問題にしてるのは、クライアントに出力されるIDをどうするか、って話で
サーバ側の制御の問題なんだが

191:nobodyさん
09/05/05 12:09:59
>>190
いま見てみたんだが、だいぶいろんなことが可能そう

MSDNによれば、
>他のコントロール内でレンダリングされたコントロールの参照
>子コントロールをページにレンダリングするコントロールには、
>GridView、DetailsView、FormView、DataList、Repeater の
>各コントロールなどのデータ リスト コントロール、ユーザー コントロール、
>および Web パーツ コントロールが含まれます。

これらは行が動的に生成されるので、
操作した行にあるコントロールを操作するとか、
同じ列の同じコントロールを全部参照するとかは行うけど
ある特定行(ID)をピンポイントで操作するというのはあまりないと思うんだが、

そうすると
・$(".className") 特定のクラスを持つタグにアクセスする
・$(tagName, base) 要素を検索する
・$("tagName > tagName") 特定の階層条件を満たすタグにアクセスする
でほぼクリアできそうだ。

192:nobodyさん
09/05/05 14:03:29
久しぶりにいじると楽しいjavascript
jQueryでscriptを記述

<script type="text/javascript" src="jquery-1.3.2.js"></script>
<script type="text/javascript">
function culc() {
 var sum = 0;
 for (var i = 0; i < $(".calcSelect").size(); i++) {
  sum += parseInt($(".calcSelect").get(i).value);
 }
 alert(sum);
}

function getrow(clientid) {
 var object = $("#" + clientid);
 alert($("select", object).get(0).value);
}
</script>

193:nobodyさん
09/05/05 14:04:24
Repeaterでdropdownlistを配置して

<form id="form1" runat="server">
<div>
 <asp:Repeater ID="Repeater1" runat="server">
  <ItemTemplate>
   <div id = "<%# Container.ClientID %>">
    <select id="Select1" class="calcSelect">
     <option value="0">0</option>
     <option value="1">1</option>
     <option value="2">2</option>
    </select>
    <input id="Button1" type="button" value="button" onclick="getrow('<%# Container.ClientID %>');"/>
   </div>
  </ItemTemplate>
 </asp:Repeater>
 <input id="Button2" type="button" value="button" onclick="culc();" />
</div>
</form>

リピータに適当にバインドする
this.Repeater1.DataSource = new int[] { 1, 2, 3, 4, 5 };
this.Repeater1.DataBind();


194:nobodyさん
09/05/05 14:08:38
行のobjectを取得する方法はいろいろあると思うけど、
今回はContainer.CliendIDで行ごとに一意の名前を付けて、
そこから目的とするobjectを取得してみた

列の集計は集計するobjectに同じclass名を設定すれば
配列で取得できるのでそこから合計値を求めることができる

クライアント側だけで何かをしようと思うのなら割と便利かもしれない

195:nobodyさん
09/05/05 14:38:08
>>191
同じクラスの要素や、同じタグの要素をID使わないでどうやって識別するんだ?

繰り返し系のコントロールはまあ仕方ないにしても
マスターページやUpdatePanelでもID変わるのがなぁ

196:nobodyさん
09/05/05 14:43:33
>>195
>>192-194で試してるように、極端な話、一意の名前を持ったclassのdivで囲めば直接アクセスできる

197:nobodyさん
09/05/05 14:59:57
>>194
細かい突っ込みだがな、
>今回はContainer.CliendIDで行ごとに一意の名前を付けて、
正確には、システムが自動的に生成した一意の名前を指定して、だな
システムが生成したIDを実行時バインドでスクリプト中に埋め込んでるんで、
これは実行時にスクリプト書き換えてる
で、このID生成ロジックだが、>>185が書いてある通り
>子コントロールに対して一意の ID を生成する式は変更されることがあります。
だから、それなら自分で実装できないかと思ったんだよ

これができれば、マスターページ使うページはIDは
そのまま出力させる、ってことが可能じゃないかと思ったんだ
いま1.1でマスターページ使ってないシステムあるんだが、試しに
マスターページつかって2.0(3.5)に移行してみたら、クライアントスクリプト周りが全滅したんでなw


198:nobodyさん
09/05/05 15:16:49
>>197
いや、だから>>192-194を読んでる?
今回は一意の名前としてContainer.CliendIDを利用しただけで、
それを自分の用意したものに変更すればいいだけでしょ?

そうすりゃ自分で生成したIDで実装しているのと同じじゃない。
例えば
private int _count = 0;
public string GetID(bool canAdd)
 return canAdd ? "ctrl" + (this._count++).ToString() : "ctrl" + this._count.ToString();
を実装して、Container.ClientIDの代わりに実行時バインドしてあげればいい。

199:nobodyさん
09/05/05 16:03:29
>>198
実行時バインドで動的に書き換えるならどうとでもなるだろ
そもそもの問題はな、ASP.NETのコントロール使うと
自分で指定したIDと、実行時に出力されるIDが違う(ことがある)、ってことなんだよ
これはデータバインドするような繰り返し系のコントロールに限らないんだ
で、このルールが制御できない
ルール決め打ちでも実用上問題ないかもしれないが、自分でルール決めれたら
実行時バインドに頼らなくても(クライアントスクリプトだけで)ID生成できるだろ

サーバコントロールじゃないhtml要素に実行時にID振るなら、自分で制御できるかもしれんな
webコントロールじゃなくてhtmlコントロールだと動作変わるのか?
あとで実験してみるが、たとえばdivに(実行時バインドで)ctrl1,2,3...ってID振るようにしても、
runat="server"つけたらID変わると思うんだ

200:nobodyさん
09/05/05 16:57:12
そもそもrunat="server"つけると、解析エラーになった
サーバコントロールのIDにバインド式は書けない模様

201:nobodyさん
09/05/05 22:49:02
>>165
念のため言っとくが、アプリケーションプールのリサイクルとは別に
アプリケーション自体の再起動(アプリケーションドメインの再起動)もあるぞ。

まあありがちなのは、binフォルダにログ書くとかあほなことやってるパターンだな。


202:nobodyさん
09/05/06 03:19:58
>>199
>実行時バインドで動的に書き換えるならどうとでもなるだろ
IDは書き換えられないでしょ

>マスターページやUpdatePanelでもID変わるのがなぁ
こちらのテストではASP.NET AJAXフォームに設置したUpdatePanel内に
コントロール配置してもIDは変化しないよ(Repeater等は除く)?

>自分で指定したIDと、実行時に出力されるIDが違う(ことがある)、ってことなんだよ
まったくソースをみてくれてないんだなぁ。
誰もIDの話なんかしていないんだけど。

>そもそもrunat="server"つけると、解析エラーになったサーバコントロールのIDにバインド式は書けない模様
だからID名を実行時にバインドしろなんて言っていないし、
>>192-194でもそんなことしてないんだが。
なんで>>192-194のソースを見て何をしているか理解しようとしてくれないのか理解に苦しむ。


203:nobodyさん
09/05/06 06:54:06
>>202
>IDは書き換えられないでしょ
サーバコントロールじゃないhtml要素なら書き換えられる

>こちらのテストではASP.NET AJAXフォームに設置したUpdatePanel内に
>コントロール配置してもIDは変化しないよ(Repeater等は除く)?
これ、サーバコントロールでも?
後日検証してみる

>まったくソースをみてくれてないんだなぁ。
>誰もIDの話なんかしていないんだけど。
>>176,183 あたりの流れから話してるんだと思ったが、そうじゃなかったのか
じゃあお前に絡んだ俺が悪かった

>だからID名を実行時にバインドしろなんて言っていないし、
>>192-194でもそんなことしてないんだが。
>>193
 <div id = "<%# Container.ClientID %>">
は、IDを実行時にバインドしてるのじゃないのかね?

まあ、IDがどうこうを主眼にしてないなら、>>192-194について
これ以上俺が言いたいことはない
話がかみ合わないのも当然で、あやまっておく



204:nobodyさん
09/05/06 09:13:30
>>164
>>201
ご返答ありがとうございます。

リスタートの条件はこれくらいかな。
URLリンク(www.atmarkit.co.jp)

仮想ディレクトリ下のファイル・ディレクトリをいじってるので、
これが怪しい気がしてきた。
aspx等のみ対象だったら無関係だけど。
URLリンク(support.microsoft.com)

なんにせよリスタートしているか確認して出直してきます。

205:nobodyさん
09/05/06 10:44:48
>仮想ディレクトリ下のファイル・ディレクトリをいじってるので、

どういじってる?
例えばフォルダ作ったりしたら強制再起動だった気がするぞ、詳細は覚えてないが。


206:nobodyさん
09/05/06 10:49:18
基本的にアプリからいじっていいのは、
App_Data配下のみだと思っておいた方がいい。


207:nobodyさん
09/05/06 11:16:35
以外と良いスレだな。

208:nobodyさん
09/05/06 11:46:30
>>203
何がしたいんだ?
反論のための反論か?

209:BASP21でメール送信の際 503エラーが起こっています。1
09/05/06 13:07:40 rRUTbrry

この質問をご覧いただきましてありがとうございます。

普段、Linux系のサーバを使っていますが、臨時でwindows + ASPのトラブルに当っています。

ASPサイトにて、BASP21で問題無くメール送信をしていたのですが、つい1週間程前から503エラーとなり、原因が判らず困っております。

コードは

Set ObjBasp = Server.CreateObject("basp21")
rc = ObjBasp.SendMail(メールサーバ,メールto,メールfrom,サブジェクト,mbody,"")
Set ObjBasp = Nothing

となっていて、1週間前まで送信に問題はありませんでした。

エラー戻り値は
503 This mail server requires authentication when attempting to send to a non-l

となっています。

認証が必要なのかと思ったのですが、全く同じソースの、別のページでは
503エラーは出るものの、メールは送信できています。
逆に、メールが全く送信できないページがあり、そこの対処で四苦八苦しております。


210:BASP21でメール送信の際 503エラーが起こっています。2
09/05/06 13:14:29 rRUTbrry
サーバはwindows2003です。

サーバ管理者に問い合わせたところ、

> > 要求情報:
> > 要求 URL: URLリンク(www.xxxxxx.co.jp)
> > 要求パス: /WebResource.axd

> > イベント コード: 3005
> > イベント メッセージ: An unhandled exception has occurred.

> > 例外情報:
> > 例外の種類: CryptographicException
> > 例外メッセージ: パディングは無効なので、削除できません。

との返答が帰ってきましたが、
サーバに /WebResource.axd というファイルは無く、
この返答がよく判っていない状況です。

ご指導いただければ幸いです。



211:nobodyさん
09/05/06 14:39:29
WebResource.axd要求してるということは、ASP.NETだと思うんだが
まず、ASP.NETなのか旧aspなのか?

212:BASP21でメール送信の際 503エラーが起こっています。
09/05/06 16:30:05 rRUTbrry
お返事感謝致します。

本当に不慣れでお恥ずかしい限りですが、
.NETでは無いと思われます。
下記が、ルートにある Default.aspx の頭の部分です

<%@ Page Language="VB" MasterPageFile="~/xxxxe.master" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" title="xxxxxxx" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

213:nobodyさん
09/05/06 16:53:20
.aspxってのは普通ASP.NETの拡張子なんだがな
.aspxのなかでServer.CreateObject("basp21") やってるのか?

214:BASP21でメール送信の際 503エラーが起こっています。
09/05/06 17:37:24 rRUTbrry
お返事遅れて申し訳ありません。

Set ObjBasp = Server.CreateObject("basp21")

自体は、単体のdefault.aspで行っております。



215:nobodyさん
09/05/06 19:22:43
>>203
いやだからだな・・・

サーバコントロールはRepeaterなどで配置するとIDが変わる

jQueryを使えばいいじゃない

jQuery使ったことないけどID直接指定(ID変わるから)できないから無意味では?

jQueryでサーバコントロールに指定したclass名で直接的にオブジェクト取得できるし
jQueryで<div id=''></div>で囲めばid名で直接的にオブジェクト取得できるよ
(class名は変わらないし、<div>のタグはサーバコントロールではないのでID変わらないから)

という流れで話しているのに、

>>197 >だから、それなら自分で実装できないかと思ったんだよ→だから代替方法を説明してるんですが・・
>>199 >実行時バインドで動的に書き換えるならどうとでもなるだろ→サーバコントロールはできないです
>>203 >は、IDを実行時にバインドしてるのじゃないのかね?→サーバコントロールできないからIDかわらんdivで代替してるんです

と、かみ合ってないのは、あなたとほうだと思う






216:nobodyさん
09/05/06 19:26:54
だから>>192-194を実際に動作させて、少しソースをいじってくれれば、
Repeaterコントロール内に設置された、
ASP.NETによって長いIDが勝手に付けられてしまうコントロールでも
オブジェクトを取得できるということを示していることがわかると思ううんだが、
なんで試してくれないの?

MasterPageでも同様の手法で、長いIDに変わってしまうコントロールを
取得できるから、わりと便利だと思うんだが。


217:nobodyさん
09/05/06 19:42:52
>>209
URLリンク(www.kotaete-net.net)

218:nobodyさん
09/05/06 21:11:31
>>216
ためしてるし、お前が示している範囲ではおまえの言うとおりだ

219:nobodyさん
09/05/06 21:43:45
ASPかASP.NETかどっちなんだよw


220:nobodyさん
09/05/06 22:39:19
>>215
>>203が馬鹿なんだから、ほっとけ

221:nobodyさん
09/05/07 00:48:26
ASP.NET AJAX + jQueryで適当にやってると酷いことになるよね
ASP.NET + jQueryかASP.NET AJAXオンリーにするかで分けた方がいいと思う


222:nobodyさん
09/05/07 03:13:36
>>214
Server.CreateObject("basp21") やってるソースがあるファイルの拡張子は
.aspxじゃなくて.aspなのか?

まあ、単にメールサーバーがSMTP認証要求してるだけの気がするが


223:BASP21でメール送信の際 503エラーが起こっています。
09/05/07 11:20:52 eAkk+1Gw
皆さん、お忙しい中ご返答感謝いたします。

確認したところ、ASP.NETでした。

>>222

Server.CreateObject("basp21") やってるソースがあるファイルの拡張子は asp です。

>まあ、単にメールサーバーがSMTP認証要求してるだけの気がするが

私も、今はその線が強いと感じて現在テスト中です。
今まで、問題がありませんでしたので、なぜ急に・・・と思っているのですが。
しかもメール自体は送信されているので・・・

サポートからの/WebResource.axd が問題という所でASP系資料ひっくり返したり、
孤軍奮闘でしたので、お返事大変心強いです。感謝致します。

224:nobodyさん
09/05/07 12:21:41
>>223
マルチポストしてんじゃねーよ 失礼だろ
URLリンク(www.kotaete-net.net)

225:BASP21でメール送信の際 503エラーが起こっています。
09/05/07 12:38:46 eAkk+1Gw
>>223 様

失礼がありましたこと、お詫び申し上げます。

226:nobodyさん
09/05/07 21:14:30
/WebResource.axdはASP.NET特有。
だが問題のページはaspだという。
だが確認してみればASP.NETだという。


227:BASP21でメール送信の際 503エラーが起こっています。
09/05/07 23:08:17 o/J6ITqf
本当に門外漢ですみません・・・サイト自体は全く知らない人間が作ったものでして・・・

サポートの続報では、

認証は必要無いそうです。
メールは送れてるので、

default.asp内のObjBasp.SendMail 自体は動いていて、
何か他の部分でしくじってて、それが

ObjBasp.SendMailの戻り値503と/WebResource.axdのエラーとしてでてるのだろうと。

しかし、ObjBasp.SendMailの戻り値と/WebResource.axdの関連性がイマイチわかりません。

メールが送れてるにも関わらず、503の戻り値があり、

そのエラーのヒントは /WebResource.axd だということなのですが・・・

228:nobodyさん
09/05/07 23:53:45
ヒントってなんだよw ヒントもらってるなら正解も教えてもらえw
aspならWebResource.axdは直接関係ないよ

ObjBasp.SendMailの戻り値503 って何をどうやって何を確認してるんだ

229:nobodyさん
09/05/08 00:08:57
マルチポスト野郎は消えてくれよ
誰も教えないだろこんな状況じゃ

本当に失礼だと思うならこっちでも詫びいれてるはずだよな?
URLリンク(www.kotaete-net.net)


230:nobodyさん
09/05/08 00:58:30
ヒントとか・・・
何となくわかってるけど解決してないとかそういうもんじゃねぇのかw
調べる時間を得るために

231:nobodyさん
09/05/08 01:46:47
ascxファイルとcsファイルを作ったんだが、上手く値が渡されない(Labelとか)
aspxのときは問題なくいったんだが、ascxにした途端、宣言したlabelはnullがなんとかとかいって、
値がうまく共有?出来ない
どなたが打開のヒント頂けませんか?

232:nobodyさん
09/05/08 01:55:36
ソースをうぷしれ

233:nobodyさん
09/05/08 12:01:02
>>231
UserControl1.Findcontrol("Label1").text = "hage"
//キャスト省略

234:nobodyさん
09/05/08 18:05:34
>>233は教えてあげる目的でそういう記述してくれてると思うけど、
実際にはLabelオブジェクトをプロパティで公開するか
Label.Textを公開してあげればいいんじゃないかと思われる


235:231
09/05/09 00:26:29
ごめんなさい、非常に強い睡魔で寝てしまいました
>>232-234
俺の勘違いでイベント発生してないだけでした
本当にバカでした

236:nobodyさん
09/05/09 09:51:49
(#^ω^)…

237:nobodyさん
09/05/09 13:10:10
それでもlabelobjectがnullな状態ってのがよくわかんないね

238:nobodyさん
09/05/09 23:37:56
くっそー
いままでprototypeだったけどjquery結構便利だな
なんか和んだ( ´ー`)フゥー...

239: [―{}@{}@{}-] nobodyさん
09/05/11 09:16:40
>>238
VS2008SP1からだったか、jqueryは標準サポートだしな

240:nobodyさん
09/05/12 00:01:12
VS2005でなんとかしてjQuery使えないかな
IntelliSenseは無くてもいいから

241:163
09/05/12 01:28:31
>>204の続きです。
以下のイベントログが出力されており、
AppPoolが再起動している為、
セッション情報が消えてるぽいです。
クラッシュダンプで調べるしかないでしょうか?
他に調査方法があればご教授お願い致します。

・イベントログ
アプリケーション プール 'xxx' を提供しているプロセスは、
World Wide Web 発行サービスで致命的な通信エラーを検出しました。
イベントID 1011


242:nobodyさん
09/05/12 01:37:48
>>240
普通にJQueryいれりゃいんじゃないか?


243:nobodyさん
09/05/12 05:14:26 U71Iyk1V
旧ASPでPDFファイルを作成したいのですが、どんな方法があるでしょうか。
PDFは表形式で、グリッドの高さは可変で、行の途中にページの境目が来る
ようならその行の前に改ページしなくてはなりません。
サーバー側の処理でPDFファイル化したいです。
よろしくお願いします。

244:nobodyさん
09/05/12 06:58:22
安心したまえ。PDFだってテキスト直うちで書けるんだ。
つまり、FileSystemObjectでテキストファイルを生成して、
後はPDFの仕様通り文字列を吐き出せばいいだけだよ。簡単でしょ。

マジレスすると、無理だから別途そういうパッケージソフトを買う。
ビジネスソフト板で帳票作成ソフトというと、まぁ数は限られるから調べてみるといい。

245: [―{}@{}@{}-] nobodyさん
09/05/12 09:09:04
>>241
本質的な解決ではないけど、session維持したいなら
stateserverモードを使うとかどうよ?

246:nobodyさん
09/05/12 10:47:32
ClassicASPでPDFって言うと何があるのかね
ASP.NETならActiveReport一押しなんだけど

247:243
09/05/12 11:35:40 U71Iyk1V
>>246
ActiveReportって定型のフォーマットしかできないイメージなんですが、
グリッドの高さ変えたりページはみだす前に改行したりできますか?



248:nobodyさん
09/05/12 12:00:02
>>247
フリーハンドで描画できるだろ。

249:nobodyさん
09/05/12 12:03:03
>>247
CanGrowとかCanShrinkとか
まぁ・・・簡単な動的~FORMATイベントとか駆使して複雑な動的ってのもできるっちゃぁ出来ると思うけど

たいがいの案件はこなせてきた

一回体験ばん入れて使ってみればどうかな?

250:249
09/05/12 12:03:47
だめだ・・・日本語が支離滅裂だ…
疲れてんのかな・・・

251:nobodyさん
09/05/12 13:08:49
>>247
>グリッドの高さ変えたりページはみだす前に改行したりできますか?
設計が悪いだけじゃない?
改行したら自動的に2行分に伸長してくれて描画してくれるとか余裕だと思うけど

おおよその要求には応えてくれたけど、できないこともあるかもしれない
例えば1行に記述できず2行に伸長してくれたとき、
それがページの最下行だったら改ページして次ページの最上行にしてくれるとか、
もしくはそのまま印刷してくれるを選択できるとか、フッターの表示の関係とか。

グリッドの高さについては、サンプルのCreating and Modifying Report Layouts at Run Time
にあるように実行時調整してしまえば、可能と思われる(英語版ですまん)

>The format event allows the properties of report sections and controls
>to be modified including height, visibility, and other visual properties.
//フォーマットイベントでは、レポートセクションやコントロールの高さや表示/非表示などを含む
//表示に関するプロパティを変更することができる

252:nobodyさん
09/05/12 13:13:33

すまん上の「できない例」は想像の話。
グループヘッダーとか、レポートのフッターの改行とか伸長とか、改ページごとに表示するとかは
帳票によってクセがあったり得手不得手があるもんなので、試してみるしかないね。

253:nobodyさん
09/05/12 13:26:34
>>251
ActiveReportsならASP.NETのも基本的に変わらないけど

>改行したら自動的に2行分に伸長してくれて描画してくれるとか余裕
CanGrowプロパティだったかな? で伸縮させるように出来る

>それがページの最下行だったら改ページして次ページの最上行にしてくれるとか、
>もしくはそのまま印刷してくれるを選択できるとか
プロパティいじるだけでそうなるはず。
KeepTogetherかなんか忘れたけど

高さ操作は処理中にしようと思うと基本的にFormatイベントでのみしか推奨されていないけどいける

中途半端な知識なんで勘違い多いかも知れんが

254:nobodyさん
09/05/13 10:29:56
CustomValidatorを継承したコントロールを作ったんだけど、
ページ内のValidationSummaryがErrorMessageを拾ってくれない。
isValidやErrorMessageは正しくセットされていることは確認した。
カスタムコントロールのは拾ってくれないのかな?

255:nobodyさん
09/05/13 11:41:36
継承って文字通り継承?
それともユーザコントロール?

256:nobodyさん
09/05/13 13:01:18
文字通りの継承。
検証失敗時にTextが表示されるし、
ValidationGroupも検知して検証してくれている。
ただ、なぜかValidationSummaryに反映されない。
もちろんPage.IsValidもfalseになってる。

257:nobodyさん
09/05/13 14:31:56
Page.GetValidators()を調べてみたんだが、
単にメンバに持ってるValidatorCollentionをsingletonで返してるだけなんだな
どうやってValidatorCollentionにValidator(BaseValidator)をaddしてるのかよくわからん
ValidatorCollentionの中身も単なるIEnumerableを実装したリストクラスに見えるし

258:sage
09/05/13 15:35:29
チラ裏
今更ながらIIS+ASP.NET+SQLiteでゴニョゴニョしてみたけど、手軽で良いわこれ。
要IIS(monoっつー手もあるけど保留)な点さえクリア出来るなら、ちょっとしたページ作成なら
これでいいや。

259:nobodyさん
09/05/13 15:38:24
オレもこれやりたくてmono入れようとしてるけどSolarisだときっついな
まあ時間取れるまでWinサーバ使うか・・・

260:nobodyさん
09/05/13 19:23:50 EB+s12M/
.NET Framework 3.0のPage.PreviousPage.FindControlについて教えてください。
トップページにある「発言ボックス」に入力した文字列を、表示ページにて表示したいのですが
テキストボックスを参照できなくて困っています。

マスターテンプレート(Template.master)
 ┗トップページ (Default.aspx)
    ┗ユーザコントロール(Hatsugen.ascx ID=hatsu)
       ・テキストボックス コントロール(ID=moshi)
       ・ボタン コントロール(botan)

マスターテンプレート(Template.master)
 ┗表示ページ (showhatsugen.aspx)

という2つのページ(階層)があるのですが、トップページ側のボタンコントロールで
PostBackUrl="showhatsugen.aspx" としています。
showhatsugen.aspx側で、@ITの記事を参考にテキストボックス(moshi)を参照しているのですが
nullが返ってきてしまいます。

■試したこと
①@ITの記事のまんま試してみた。
TextBox a = (TextBox)Page.PreviousPage.FindControl("moshi");

②ユーザコントロールも参照しないとだめかもと試してみた。
TextBox a = (TextBox)Page.PreviousPage.FindControl("hatsu").FindControl("moshi");

③テンプレートもいれないとだめかもと思って試してみた。
TextBox a = (TextBox)Page.PreviousPage.Master.FindControl("hatsu").FindControl("moshi");

上記のような階層の場合、どのように値を参照できるか教えてください。

■参考にした@ITの記事
URLリンク(www.atmarkit.co.jp)

261:nobodyさん
09/05/13 19:37:56 EB+s12M/
あ、できました。③で。

262:nobodyさん
09/05/13 19:45:55
PostBackは原則的に同一ページにするのが望ましいというのはわかってて、
あえてそれをやってるんだよね?

263:nobodyさん
09/05/13 20:05:04
はぁ? 馬鹿じゃね。しねよ

264:nobodyさん
09/05/13 20:21:45
そこらの本読むとPostbackUrlやServer.Transferの方が
Response.Redirectよりよく思えるんだよな。
いやまぁ実際メリットもあるけど。

265:nobodyさん
09/05/13 22:50:11
ASP.NET MVCのほうが良いよ。

266:nobodyさん
09/05/13 23:01:05
PostbackUrlが良いと言ってるやつは実践してみてないやつ。
ASP.NETの各種仕組みと相性が悪い。

Server.Transferはいいんだけど。URLが紛らわしくなるため敬遠されることが多い。


267:nobodyさん
09/05/13 23:49:01
一つの画面に収まる機能は一つのページに記述して
異なるページに遷移するときはsessionだのcookieだの使用したほうがわかりやすいよね
asp.netの場合は1ページが1クラスだから、
クラス内の処理は、なるべくクラス内に責任もって記述してあげるのが
オブジェクト指向の観点からもわかりやすい気がする

各ページのクラスにCookieやSessionを扱う、
ICookieや、ISessionみたいなインターフェースを実装して、
Serializableなデータを保持するクラスを、
ページ間でやりとりできるようにしたら面白いのになと思ったり。

268:nobodyさん
09/05/14 00:02:25
>>267
うちはページ継承してベースページを作成して
各機能ページはそれを継承して処理ってる

セッション管理とかログインしているいないとかのチェックはベースページ側でやってたり

インターフェイスもいいけどなんか使いどころが難しくってさ・・・
各ページで実装もセにゃいかんし
レベルが低いだけだとは思うが


269:nobodyさん
09/05/14 00:15:25
やたらとインターフェイス使いたがるのもどうかしてる

270:sage
09/05/14 11:53:07 W6V8lEeJ
はじめまして。
現在vs2008、.NET FrameWork3.5にてASPのシステムを作成しています。

セッションが切れた場合の処理としてテストしているのですが
global.asaxでsession_startでセッションが切れた場合にエラー画面へ
リダイレクトする処理を入れているのですが
そこを通った後またsession_startに来てしまいリダイレクトしてくれません。
ログをみてもその関数が終わったらすぐにその関数というようになっています。

原因を知っている方お願いいたします。

If Me.Request.RawUrl.IndexOf("XXX.aspx") < 0 Then
If Session("UserId") = "" Then
Response.Redirect("URLリンク(XXXXX)")
End If
End If



271:nobodyさん
09/05/14 12:33:07
これかな?
エラーページにResponse.Redirectで遷移すると
設定したSessionが消えてしまうことがあるらしい
URLリンク(www.atmarkit.co.jp)

ログやそれに似た用途ならglobal.asaxでもいいけど
認証ならフォルダごとにWeb.configでやったほうがいいかも

272:270
09/05/14 13:26:27
>>271
的確なアドバイスありがとうございます。
リダイレクトをtransferにすることで対処できました。

273:nobodyさん
09/05/14 15:08:04
ここASP.NETだけど・・・


274:nobodyさん
09/05/14 15:18:31
WebフォームにCalendarコントロールを貼って
・日付が変更される毎にカウンターCcountを1増加させて表示(Label1)
・選択されたカレンダーの日付を表示(Label2)
・PageLoadされる毎にカウンターPcountを1増加させて表示(Label3)
させたい。

Partial Class _Default Inherits System.Web.UI.Page
 Public Shared Pcount As Integer
 Private Ccount As Integer

 Protected Sub Calendar1_SelectionChanged(ByVal sender As Object, ByVal e As _
 System.EventArgs) Handles Calendar1.SelectionChanged
  Ccount = Ccount + 1
  Label1.Text = Ccount.ToString 'Calendarの日付が変更された回数を表示

  'カレンダーの日付を選択したら、カレンダーの値を表示する
  Label2.Text = Calendar1.SelectedDate.ToShortDateString
 End Sub

 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
 Handles Me.Load
  Pcount = Pcount + 1
  Label3.Text = Pcount.ToString 'PageLoadされた回数を表示
 End Sub

End Class

カウンターの定義で、上記のように Public Shared ではなく Private にすると
数値が初回+1しただけで、それ以上増分されません。
何がいけないのでしょうか?

275:nobodyさん
09/05/14 15:38:57
>>274
public shared PcountはASP.NET全体で利用するアプリケーション変数(グローバル変数)的なものだったと思う
privateにすると、そのPageのメンバ変数になるので、ポストバックすると新しいPageのインスタンスが生成されるから、
Pcountも新しいインスタンスの異なるメンバ変数扱いになってポストバック前のデータを保持しない

そう考えるとpublic sharedは便利と思うかもしれないけど、
複数の人が同時にそのページを利用すると、使用した人の数だけPcount++されてしまって
思ったような動作はしないと思うよ
Aさんが日付選択→Pcount → 1
Bさんが日付選択→Pcount → 2
Aさんが日付選択→Pcount → 3 
Aさん2回目の使用でPcount==2のはずなのに途中でBさん使ったのでなぜかPcount==3

なんでPcountの値をセッションやクッキー、ViewStateに保存して
Page_Loadで復元するような処理を書く必要がある
この場合同じページへのPostBackだしセキュリティにも大きな影響を与えなさそうなので、
ViewStateがいいと思う

276:nobodyさん
09/05/14 16:02:31
早速のレスありがとうございます。

>privateにすると、そのPageのメンバ変数になるので、
>ポストバックすると新しいPageのインスタンスが生成されるから、
>Pcountも新しいインスタンスの異なるメンバ変数扱いになって
>ポストバック前のデータを保持しない

ということですね、理解しました。

データの保持の違いとか、処理タイミングとか、実行順とかまだ整理できて無くて
そのために簡単なサンプルフォームを作って、カウンター表示を仕込んで試しているのですが
条件が変わると自分の狙った内容と実行結果が違ってたりして、・・・頑張ります!

277:nobodyさん
09/05/15 19:06:29
Web開発の初期に、よくはまる道だ
がんばれ

278:nobodyさん
09/05/15 21:06:17
JavaScriptで好き勝手やって、ViewStateの内容と
同期しなくなるとか昔はまったな。
挙句、不正な操作扱いされたりとか。

279:nobodyさん
09/05/15 21:07:23
肝心なのはPublicかPrivateかじゃなくて
Sharedかそうじゃないかなんだが、大丈夫か

280:nobodyさん
09/05/16 00:33:16
最近VB.NETでのレスをよく見かけるが、実業務のasp.netでもVBって多いのか?
言語の優劣を語る気はないがなんとなく気になったC#使い。

281:nobodyさん
09/05/16 02:18:45
もともとのASPがVBだから、その流れでVBが多いんじゃない?
業務系もVB6の流れを汲むところは、今でもVB.NETが多いし

新しい言語に切り替えるって難しいよね
新しいテクノロジに理解があるところばかりじゃないし
過去の資産に縛られたりして


282:nobodyさん
09/05/16 03:21:32
で旧VBで下手に培われてしまった悪しき習慣が.NETにも浸食するんだぜ。
VBの頃はネットが普及したせいで、ばかみたいなコードや習慣が広がりすぎた。
でその悪しき習慣をASP.NETとかにまでそのまま持ってくるもんだからとんでもないことに。


283:nobodyさん
09/05/16 03:24:32
>>280
俺はC#だ
VBなんて見ただけで寒気がする

284:nobodyさん
09/05/16 04:40:23
質問
1.Global.asaxはシングルトンか?
2.Global.asaxにインスタンス変数を定義して、HttpContextのようにリクエストに関する情報を保持するのは問題ないか?
3.BeginRequestイベントとHTTPハンドラ(ページインスタンスなど)は常に同一スレッドで実行されるか?
4.ViewStateUserKeyはCSRF対策に利用できるか?
5.Global.asaxにインスタンス変数を定義して、グローバル変数として使えるか?
6.汎用ハンドラ(ashx)でIsReusableがtrueを返すように実装すると、そのハンドラは基本的に再利用されるものと期待できるか?
7.グローバル変数が必要な時Applicationオブジェクトを定義するのは望ましい方法か?
8.サーバを分散していない場合、ApplicationオブジェクトはそのWebアプリケーション内で完全に一つとみなしてよいか?
9.ViewStateは基本的に改ざん防止策がほどこさえているので、ViewStateの値は基本的に信用してよいか?
10.Webガーデンを使用していないのに、そのアプリケーションプール用のワーカープロセスが複数同時に動作することはあり得るか?
11.認証チケットはデフォルトで暗号化されているため、HTTPSでなくても安全か?
12.フォーム認証でログアウトすると、その認証チケットでは二度とアクセスできなくなるか?
13.SQLインジェクションは、Webアプリケーション特有の脆弱性か?


285:284
09/05/16 12:15:07
ちなみに俺はリアルモンク属性だからはやく答えないと病院食を食うことになる

286:nobodyさん
09/05/16 12:23:16
自分で調べろって感じだな

287:284
09/05/16 12:36:25
実は理解度クイズだよ。
正答率は自称詳しい人でも結構低かったりもする。

>>285誰だよおまえはw


288:284
09/05/16 12:38:15
とでも書けば、誰かが答えてくれるに違いない

289:nobodyさん
09/05/16 12:44:04
いやいやクイズという限り、いつか出題者が回答するから問題ない

290:nobodyさん
09/05/16 12:46:21
まあ言われてみれば誤解さえれそうだが、ほんとにクイズだよ。
俺がさっきちょっと考えてみただけの。
テストや宿題じゃなくて(っていうか中身見りゃわかるだろうけど、そういうレベルの問題じゃない)
正解は○がって数書こうと思ったけど、結構偏ってるな、疑うなら書くが。

問題のニュアンスはわりと詳しいつもりやつが理解してないことが多かったもの。
その前に内容がマニアックに偏ってるけどな。


291:nobodyさん
09/05/16 12:58:07
こんな?

1× 2× 3? 4○ 5× 6? 7× 8○ 9○ 10?
11○ 12? 13×

?のとこはワカンネ
あと設定次第だったり、環境次第だったりするところがあるよね
ViewStateUserKeyが空文字の場合とか、
認証チケットは暗号化されてるけど認証に至るまでの経緯でhttpsでないと安全でない場合とか

292:nobodyさん
09/05/16 13:04:00
いや8も×か 中身じゃなくてApplicationオブジェクトそのものは別インスタンスかな


293:nobodyさん
09/05/16 13:08:00
正解は5個、かな?(ざっと確認してみたから間違ってたらすまんね)

環境しだいだったりするのは確かにあるが、
環境を特殊にどうこうした場合とかではなくて
一般的な標準的な状態と思ってもらっていい。
ViewStateUserKeyの場合はもちろん文字列をうまく設定すれば普通に利用できるか?という話だし、
認証チケットの扱いも特殊な状況は想定していない。
単にHTTPSじゃない経路で認証チケットを使うのは安全か?(認証チケット自体は暗号化されているが)。
ということ

Applicationオブジェクトは、そこに保存した変数というか、中身のことと思ってくれていいよ。
書き方悪かったな、いわゆるApplication変数はサーバ内で完全に一つと思っていいか?ということ。

294:nobodyさん
09/05/16 15:53:09
いやいや気になるから正確な答えを頼むよw


295:nobodyさん
09/05/16 16:34:45
2 4 9 10 が○
それ以外は×だよ


296:nobodyさん
09/05/17 06:17:41
基本的にとか、望ましいとか言っちゃうとあいまいさがのこるから
問題文もう1回精査してから回答とともにアップしなおしてくれ

297:nobodyさん
09/05/17 09:24:47
やだよめんどくさい。

1.Global.asaxのインスタンスはアプリケーションドメイン内で単一である
2.Global.asaxにインスタンス変数を定義するば、HttpContextのようにリクエストに関する情報を保持することができる
3.BeginRequestイベントとHTTPハンドラ(ページインスタンスなど)は常に同一スレッドで実行される
4.ViewStateUserKeyにユーザIDやセッションIDを設定すると、はCSRF対策にも利用できる
5.Global.asaxにインスタンス変数を定義すると、グローバル変数として使える
6.汎用ハンドラ(ashx)でIsReusableがtrueを返すように実装すると、そのハンドラは可能な限り再利用される
7.グローバル変数が必要な時はApplication変数を使用しなければならない
8.サーバを分散していない場合、Application変数はそのWebアプリケーション内で完全に一つである
9.ViewStateの検証が有効(デフォルト)の場合は、ViewStateの値にはインジェクション系の対策は不要である
10.Webガーデンを使用していない場合でも、そのアプリケーションプール用のワーカープロセスが複数同時に動作することはあり得る
11.認証チケットはデフォルトで暗号化されているため、HTTPSでなくても安全である(盗聴されても不正ログインはできない)
12.フォーム認証でログアウトすると、その認証チケットは無効となり、その認証チケットでは二度とアクセスできなくなる
13.SQLインジェクションは、Webアプリケーション特有の脆弱性である

1.×
2.○
3.×
4.○
5.×
6.×
7.×
8.×
9.○
10.○
11.×
12.×
13.×


298:nobodyさん
09/05/17 11:05:51
>>295以上の情報が何もないじゃないか

解説ぐらい書けよ

299:nobodyさん
09/05/17 12:05:47
自分で調べろよw

300:nobodyさん
09/05/17 12:14:56
今携帯だから後で書くよ。
疑問のある番号あるなら疑問点を書いてね。


301:nobodyさん
09/05/17 12:40:24
5.Global.asaxにインスタンス変数を定義すると、グローバル変数として使える
インスタンス変数ってのは、スタティックじゃない変数ということかな?
Global.asaxにPublicな変数定義しとけば、グローバルに使えると思うんだが


302:nobodyさん
09/05/17 13:12:04
そ、スタティックじゃないってこと。

303:nobodyさん
09/05/17 13:16:28
単にグローバル変数ってのもやや曖昧だったね。
ここでは、アプリケーション全体で共有できるグローバル変数という意味。
まあだいたい一般的にこういう意味になるとは思うが。


304:nobodyさん
09/05/17 16:45:45
クイズ
1.Global.asaxのインスタンスはアプリケーションドメイン内で単一である
2.Global.asaxにインスタンス変数を定義すると、HttpContextのようにリクエストに関する情報を保持することができる
3.BeginRequestイベントとHTTPハンドラ(ページインスタンスなど)は常に同一スレッドで実行される
4.ViewStateUserKeyにユーザIDやセッションIDを設定すると、CSRF対策にも利用できる
5.Global.asaxにインスタンス変数を定義すると、アプリケーション全体で共有できるグローバル変数として使える
6.汎用ハンドラ(ashx)でIsReusableがtrueを返すように実装すると、そのハンドラは可能な限り再利用される
7.グローバル変数が必要な時はApplication変数を使用しなければならない
8.サーバを分散していない場合、Application変数はそのWebアプリケーション内で完全に一つである
9.ViewStateの検証が有効(デフォルト)の場合は、ViewStateの値にはインジェクション系の対策は不要である
10.Webガーデンを使用していない場合でも、そのアプリケーションプール用のワーカープロセスが複数同時に動作することはあり得る
11.認証チケットはデフォルトで暗号化されているため、HTTPSでなくても安全である(盗聴されても不正ログインはできない)
12.フォーム認証でログアウトすると、その認証チケットは無効となり、その認証チケットでは二度とアクセスできなくなる
13.SQLインジェクションは、Webアプリケーション特有の脆弱性である


305:nobodyさん
09/05/17 16:49:05
回答
1.×Global.asaxは各リクエストに一つのインスタンスが割り当てられる(リクエスト完了後はプールされて再利用)
2.○1.より、リクエストに関する情報をインスタンス変数に保持することができる
3.×セッション準備時の同期化などの仕組みにより、スレッドが切り替わることがある
4.○もちろん使える
5.×1.より、インスタンス変数はアプリケーション全体で共有できない
6.×実はIsReusableは無視されている(常に再利用されない、まあこれは今の実装の話であってどうでもいい話ではある)
7.×そんなわけはない(むしろApplication変数はあまりお薦めではない、これにはいろいろ理由があるが)
8.×Webガーデンを使えば単一にはならない、またアプリケーションのリサイクルなどにより一時的に複数になり得る
9.○検証が有効であれば、少なくとも中身を改ざんされることはない(キーが漏れてるとかそういう状況はない前提)
10.○ワーカプロセスのリサイクルにより、一時的に複数同時に動作することがある
11.×盗聴されれば見事に不正アクセスできる(チケットの暗号化の意味はまた別にある)
12.×認証チケットは無効にはできない(ログアウトはクッキーを消すだけ)、とくに有効期限が長い場合これは要注意
13.×そんなわけはない


306:nobodyさん
09/05/17 20:31:50
こういうのは問題の出し方が難しいな
主眼をどこに置くかで結果が違いそうなこともありそうだ

それはともかく知らないことがいくつかあったので勉強になったよ
今度実験してみようっと

307:nobodyさん
09/05/18 18:33:02
.NETっでviewState OFF設定にしても、実行したら勝手にviewStateが入ってるんだけどなんでなんだろう?


308: [―{}@{}@{}-] nobodyさん
09/05/18 18:35:32
>>307
イベント識別するのにもViewState使ってたと思うからその分じゃね

309:nobodyさん
09/05/19 01:35:59
でも.NETでできてるサイトで、ソース(htmlの)みてもviewStateが一切無いページとかあるんだよね。
つまり.NETのコントロール一切使わなければ出ないって事かな?
それだと.NET使う意味ねーな・・・

310:nobodyさん
09/05/19 01:54:25
例えばどこ?

311:nobodyさん
09/05/19 01:55:28
ああそうだMVCならでないかもね

312:nobodyさん
09/05/19 21:35:47
なんか、viewstate="false"ってやってても
<asp:CheckBox id="CheckBox1" runat="server" />
がたくさんあると、viewstateがえらいことになる・・・・

なんとかしてOFFにしたいもんだ

313:nobodyさん
09/05/19 22:02:16
実際に20個設置してみたけど、これがえらいこと??
PostBack前の状態を維持する仕組みをhiddenフィールドで
ベタに構築することを考えたら遙かにサイズは小さいと思うし、
セキュリティ的にも安心できるし、
十分に利便性はあると思うけど

それを考慮してもViewStateが嫌ならASP.NETを使わないか
旧ASPとして利用するしかないね

314:nobodyさん
09/05/19 23:02:51
enableviewstate=falseの意味ねーじゃん
ばか?

315:nobodyさん
09/05/19 23:11:27
20個設置してたら2kぐらいの文字列にならん?

316:nobodyさん
09/05/20 00:04:28
<form runat="server">を使わなければviewstate撲滅できるよ
使えるコントロールが限られるけど

317:nobodyさん
09/05/20 00:25:56
>>314
falseに設定したものはviewstate反映されてないだろ?

318:nobodyさん
09/05/20 01:07:46
>>317
試してから言えよ

319:nobodyさん
09/05/20 13:35:47
>>318
falseにしたコントロールやページに関してはViewStateに反映されないよ
ただASP.NETとして必要なぶんが反映されてるだけ

320:nobodyさん
09/05/20 14:49:36
んだな

>ASP.NET によって使用されるページには、ポストバックを検出することを目的として、
>EnableViewState が false の場合でも読み込まれる非表示のビューステート フィールドが存在する場合があります。
ちゃんとMSDNにも書いてある。つまりASP.NETの仕様。

phpでも、ページからのpostであることを示すために、
hidden fieldで<input type="hidden" name="mode" value="postback">とかして、
$mode = $_POST["mode"];で受け取ってpostbackが入っていたらpostされたと認識して
初期処理したりするけど、それをViewStateを利用して実現してる。

これすら嫌ならもはやwebアプリは向いてないから止めたほうがいいと思う。
それかすべてsessionでやる。
モバイルASP.NETはこのViewStateの仕組みを一部のコントロールを除いて
ViewStateでなくてsessionでやってるよ。

321:nobodyさん
09/05/20 15:52:47
ViewStateだとドロップダウンリストの選択位置とか覚えておいてくれるから便利。
PHPとかで実装しようとすると大変だろうな

322:nobodyさん
09/05/20 16:52:27
基地外ばっかり

323:nobodyさん
09/05/20 17:51:12
>>321
大変ではないけどめんどくさいだけ
便利なのには違いない

つうか、必要でないViewStateだけ残して切ればいいじゃん
それすら嫌とか言うなら論外だろ

何かデータを保持るためのInputとかを別の形で実装してるようなもんじゃないか


324:nobodyさん
09/05/20 18:01:54
ViewState切り詰め話はTechNet辺りでもよく出てるが、
大した問題にならないから無視しろか、
サーバーコントロールは極力使わなずResponse.writeしろの、
大体この二つに分かれてる感じだな。

一時期俺も削減に躍起になってたけど、そもそもASP.NETって時点で…
と気づいてからは余りこだわらなくなったな。

325:nobodyさん
09/05/20 21:21:01
10KBのViewStateには超文句言うのに平気で数十KBの画像おきまくったりするページワロス


326:nobodyさん
09/05/21 00:42:51
画像は受信拒否できるしなぁ
ViewStateは問答無用だろ。。

327:nobodyさん
09/05/21 00:45:50
制作者からの視点で論じてたんじゃないのか?

328:nobodyさん
09/05/21 01:36:07 /8BtlCky
ViewStateこつこつ削ってどれだけ結果に違いが出るんだよ。ほぼ意味ねーだろ。こういう所に拘るPGはマジ使えねぇ。


329:nobodyさん
09/05/21 02:38:51
携帯みたいな従量課金の場合には影響があるので
気になるプログラマはいると思う

んで、ユーザ数が多いと、そういうコツコツが大事だったりするので、
なんでViewStateを完全に無くすことができないかを知りたいと思う好奇心は
プログラマに必要な資質だと思う

だけど、ViewStateの動作を詳しく把握してもいないのに
ViewStateの存在を制御できないから気持ち悪いとか、
こんなにViewStateがたくさん埋め込まれるのは理解できない
みたいなこと言ってるプログラマがいたら確かに使えない奴だと思う

330:nobodyさん
09/05/21 04:14:36
>携帯みたいな従量課金の場合には影響があるので
>気になるプログラマはいると思う

普通自動でセッションに保存されるでしょ

331:nobodyさん
09/05/21 07:40:13
例えばGoogleの検索結果なんかはそのままブックマークできるけど、
そういうのやろうとすると邪魔じゃね?viewstate。

332:nobodyさん
09/05/21 08:20:41
意味がわからん。
ViewStateに対して間違った期待をしてないか。

333:nobodyさん
09/05/21 13:12:01
ブックマークさせたいならGETだけでアクセス出来るようにしとくだけ。
ポストバックの結果をブックマークしたいなんてことしなければ。

334:nobodyさん
09/05/21 14:32:49
当たり前のことだがASP.NET使ってるんだからそれに見合う環境は用意するべきだろ


335:nobodyさん
09/05/21 14:46:42
みなさんSeasar.NETやEntlibなどのフレームワークは利用されていますか?
参考までにそのメリット・デメリットなどご意見いただけないでしょうか。

336:nobodyさん
09/05/21 14:59:13
ENTLIB大袈裟
S2.NET合わない

337:335
09/05/21 15:29:27
>>336
そうですか。
紹介している記事もちらほら見かけるし、一見便利そうだったんで
使うのが一般的なのかとおもったのですが、そうでもないんですかね。

338:nobodyさん
09/05/21 15:47:46
今何もないなら試してみるのもいいとは思うよ。
俺は使う気はないがもちろん使えることもあるだろう。


339:nobodyさん
09/05/21 15:49:01
覚えれば便利そうだねぇ
.NETに取り入れてられればいいんだけど
標準でないものを使うのは気が引ける

といいつつJQuery使ってるけどw

340:335
09/05/21 17:29:21
今の仕事はClassicASPがほとんどなんです。
その片手間で.NET学習しながら次の案件を・・・とは考えているのですが、
なかなか時代の進歩に学習が追い付かなくて悩んでたんです。
ご意見ありがとうございました。参考にいたします。

341:nobodyさん
09/05/21 18:47:50
念のために書いておくと、
ASPの片手間でASP.NETは無謀。


342:nobodyさん
09/05/21 20:31:49
>>333
Googleの検索、トップページじゃなくて検索後のページで考えれば、
動作的にはポストバックでしょ(getだけど)。
その結果をブックマークしたい、って話よ。

343:nobodyさん
09/05/21 20:56:33
>>342
何を言ってるんだ、お前は

344:nobodyさん
09/05/21 21:10:26
>>343
例えばTextBoxのサーバコントロールを設置して、
「送信」ボタンをクリックすると、自動的にPOSTでポストバックされるということを
言いたいんじゃないかと想像

345:nobodyさん
09/05/21 21:38:57
よくわからんが<form>をmethod="get"にするだけで、
ViewStateからなにやらクエリパラメータになるんだね
長いViewStateだと死にそうだけど

普通にクエリパラメータを作成して、Response.Redirectして
受け取り側では、Page.Request.QueryStringでGET内容を取得して
処理すれば手間(といってもphpとかなら当たり前の作業)だけど実現できそうだ
つーか、phpでは当たり前の実装が手間に感じるほど
PostBackは便利すぎってことだよね・・

この辺をうまく実装してくれるような仕組みってASP.NETにあったっけ?

346:nobodyさん
09/05/21 21:59:07
だからそういう香具師はASP.NET MVCを使えと (ry

347:nobodyさん
09/05/21 22:55:04
MVCの利点がイマイチよくわかんないのよね

348:nobodyさん
09/05/21 23:14:05
ポストバックとかViewStateとかASP.NET特有の概念が嫌いで
古き良きWeb開発をしたい人にはとても良い。
しかしまあ、Webアプリ開発初心者には普通のASP.NETのが簡単だろうな。
Java人なんかにはMVCはグッとくるかもな。


349:nobodyさん
09/05/21 23:17:16
>>342
クエリに検索キーがついたURLの文字列をブックマーク(記録)するだけで
ポストバックとかは関係無いと思うが。。

350:nobodyさん
09/05/23 08:52:49
だから、ブックマークする為に
ブラウザのアドレス欄に「検索キーがついたURLの文字列」が現れて欲しい訳だけど、
form runat="server" method="post"
内のサーバコントロールに(ユーザーが)検索キーを入力した場合、
クエリ文字列は現れてくれない(URLは変化しない)し、
method="get"
にすれば現れるけど、もれなくviewstateもついてくるから邪魔。
っていう話。
>>344でだいたい合ってる。

351:nobodyさん
09/05/23 09:36:30
まあそこは自前でやるなりするしかないでしょ。
ってのが最初から言われてることでしょ。


352:nobodyさん
09/05/23 09:43:31
単純な設定変更とか、そういうレベルではできないね。
何にしても便利なやり方にはトレードオフはあるわな。

ASP.NET MVCみたいの使うとか(詳しく知らんからどんな感じにできるのか分からんけど)、
こういう用途の時だけは、ポストバックされた情報をもとに
クエリやパスに直してリダイレクトして結果表示ってのが簡単かな。
>>345みたいな方法だね。


353:nobodyさん
09/05/23 13:26:19
そもそも論でポストバック結果をブックマークしたいってのはどういう状況?

354:nobodyさん
09/05/23 13:27:16
>>352
よく考えたらNameValueCollentionをメンバに持つクラスを作って、
それにAddされて内容に従って、name=value&name1=value1みたいな出力をさせて、
URL作るだけだから、そんなに面倒じゃないね

受け取り側もHttpUtility.ParseQueryStringでやれば、
URLを自動的にNameValueCollectionに入れてくれる

ひょっとしたら、もっと便利なutilityクラスがあるかもしれないけど。

355:nobodyさん
09/05/23 13:29:36
>>353
検索結果を表示させる一覧ページとかじゃない?
例えば業務なら担当が自分のページだけをブックマークしておいて、すぐに表示したいとか

356:nobodyさん
09/05/23 13:46:59 0dm/bxqY
そこそこの規模の運用でサイト分けってどうされていますか?
現在、IIS上、1つのWebアプリの中に10個程フォルダ分けして運用していますが、
これら全てをチェックアウトしてくると、1ビルドに軽く10分程かかります。
したがって、毎回開発に必要な分を取捨選択して落としてきています。

以前、別の会社が作成したサイトを見せてもらった時は、
そもそもサイトはIIS上全て別Webアプリとして管理されていました。
しかし、そのためにApp_Code配下の共有ライブラリは
それぞれのサイトごとに保持するという形を取られていました。

通常、あるべき管理体系を考えると前者はあり得ないんでしょうが、
後者の冗長管理もどうなんだと、いう感じです。

357:nobodyさん
09/05/23 16:56:23
>>355
そういう用途ならサーバ側に用意するのが普通では?
業務に関係無く、要は個人用にカスタマイズしたページだよな。。

検索結果だって毎回同じキーワードで検索する意味不明。

>>356
開発元(マイクロソフト)が発行している開発技術大全だかに
詳しく解説されてるよ。ASP.NETの応用編だったかな。
発行年月は古いが基本的なことが書かれていてためになる。
ViewStateなんかも巷の初心者向けには書かれてないことがあったりするからおすすめ。

358:nobodyさん
09/05/23 17:02:05
>>357
いや、だからgetで指定されてると便利な場合だよ
googlemapのような緯度経度で指定してリンクを張りたいとか、
特定の商品のカテゴリ一覧だけを表示させたいとか。
一つのページ内で完結しているんでなく、
外部からのリンクを許可するような場合。

359:nobodyさん
09/05/23 17:41:00
>>357
そのサーバ側の用意として、getで指定するページを作るわけだが
まあ、厳密にはポストバックされているページではないがな


360:nobodyさん
09/05/23 17:44:57
>>356
運用って何を指しているんだ?
チェックアウトやビルドは通常開発段階での話だが、
開発方法をして運用っていってるのか?

あるべき管理体制ってのは、何の管理をする体制のこと?
ソースの管理か?

361:nobodyさん
09/05/23 18:55:09
>>360
エスパーすると、共有のライブラリをプロジェクト(Webサイト)ごとに
管理しないといけないから面倒ってことでしょ

それでも1サイトを1プロジェクトにして参照設定して、
発行すればライブラリも発行されるからそれの何が不便なのかよくわからないけど。

同じサーバに同じDLLが複数存在することを気持ち悪いと思うのなら
感覚としては理解できるけど、逆に、そのサイトがアクセス数が増大してしまって、
個別のサーバに移植したいという需要が発生した時には、
何も考えることなくそのWebサイトだけを他に移動させればいいんで、
その点では利便性は増してると思うけど。

362:nobodyさん
09/05/24 08:23:28
>>350

HttpRequest.QueryString()を使えばいいだけのような気がするのだが。
別にPostBackだけが唯一のパラメータ取得の方法じゃないし。


363:nobodyさん
09/05/24 16:17:44
お前ホントに頭悪いな

364:nobodyさん
09/05/25 16:11:35
というかさ、ViewStateが「強制」なのが気持ち悪いのであって
アクセス数が多かったり、携帯だったりだと少しでも無駄は省きたいわけだ。
無駄にステートを保存してもらわなくていいし。

なんでページで「OFF」と指定しているのに組み込まれるのか。

というと、ASP.NETつかうなだとかいうやつがでてくるだろうけど、
これはMSも設計ミスと認めてるわけで、次.NETでは完全にOFFになるようだ。

結論からいうと3.5までではあきらめろ。

365:nobodyさん
09/05/25 16:12:47
※ただしイケメンに限る

366:nobodyさん
09/05/25 17:05:50
ViewState無しで、POSTされた後であるかどうかをどうやって判断するんだろうな
改ざん無しで

367:nobodyさん
09/05/25 17:07:56
携帯はモバイルASP.NET使わないほうが悪い

368:sage
09/05/25 17:44:02
キーが「日付」「SEQ」のテーブルがあって、それを表示させるウェップページを考えています。
表示させる際に、日付でグループ化したいんですが

--------
yyyy/mm/01
 ・01 xxxxxxx
 ・02 xxxxxxx

yyyy/mm/02
 ・01 yyyyyyy
 ・02 ccccccc
--------

みたいな感じで。

.NET2.0だと、Repeaterの入れ子で実現するしかないでしょうか?.NET3.5だとListViewで
お手軽に実現出来そうなんですが。

369:nobodyさん
09/05/25 18:06:49
テーブル構造がよく分からないが、
SQLテーブルに日付テーブルの日付をinner joinして
日付テーブルID、SEQテーブルID、日付、項目というテーブルを取得して、
日付でソートし、日付が異なるたびに実行時バインドで<tr><td>yyyy/MM/dd</td></tr>
という行を表示してやればrepeaterを入れ子にしなくてもいいんでね?

370:nobodyさん
09/05/25 18:10:14
>>368
最終的にどんなHTMLにしたいか考えたら結構簡単だと思うんだけど・・・
どんな方法だって実現できると思うけど?
あれだけど、極端な話テーブル使う方法もあるだろうし


371:nobodyさん
09/05/25 20:34:29
日付、SEQでソートして、日付が変わったときだけ日付を表示すればいいんだろ
入れ子にする必要なんてないだろ
日付の部分だけ実行時バインドで、表示するかどうか判定するロジック組めばいいんじゃね


372:nobodyさん
09/05/25 22:49:35
>次.NETでは完全にOFFになるようだ。
詳しく


373:nobodyさん
09/05/26 00:59:11 /YYr/a48
>>372
ASP.NET 4.0でMVC Framework標準装備って話でしょ。
ただ、MVC採用が現行の切り捨てに直結はしないと思うが。

374:nobodyさん
09/05/26 12:50:31
そういう意味なの?
どう考えても置き換わるもんじゃないのに。


375:nobodyさん
09/05/26 14:00:24
コードビハインドがなくなったら、
いままでのサーバコントロールとか一式駄目になるな

376:nobodyさん
09/05/26 14:12:00
うーむMVCも触ってみようかな

377:nobodyさん
09/05/26 20:37:00
MVCやってみた
実行時バインドを多様してhtmlとコードを分離してるってだけみたいな感じだね
M→Linq To SQLやLink To Entityなどデータベースからデータを取得する
V→htmlと実行時バインド
C→実行時バインドの結果だけを作るクラス
こんな感じ?

むかし普通のASPの頃、デザインとコードを分離したくて、
1)デザイナの作成したhtmlの任意の場所に##Result##みたいなマーカーを設置する
2)ASPで出力するhtmlを作成する
3)ASPでFSOで1)を読み込んで、##Result##の文字を2)で作成したhtmlで置換する
なんてことをやってたけど、これをシステム化した感じだ

コードとデザインを別の意味で分離できるからこれはこれで便利なんだろう
ただ動的に生成されるタグは少なからず存在するので
JavaScriptの問題はやっぱり解決はできなさそうだ。

378:nobodyさん
09/05/27 10:49:08
VWD 2005 Express Editionを使っています。

データベースのテーブル作成で、
列名'ID' を IDENTITYの指定で(Is Identity)>「はい」を選択し
・IDENTITYインクリメント=1
・IDENTITYシード=1
とした場合、

「テーブルデータの表示」を開くと、自動的に初期値ID=1が表示され、
1レコードを入力完了すると、自動的にID=1が表示される。

となるのではと思うのですが、
'ID' の欄が「セルは読み取り専用です。」と(タスクバーに)表示され手入力不可。
これはよいのですが、データがNULLのままです。

どうすれば自動的にIDが入力されるようになるのでしょうか?

379:anon
09/05/27 11:44:02
>>368
まともな回答が付いてないようなので。

repeaterをネストさせるのが一番簡単だと思うよ。
DataSetとしては、日付をDistinctしたものと、テーブルをそのまま取得し
たものの2つを用意して、2つの間でリレーションを設定。本文を格納した
DataSetに対してはDataViewを設定。

これで階層構造で表示させられる。

380:nobodyさん
09/05/27 12:18:04
>>379
>まともな回答が付いてないようなので。

>>369,371は無視か?
それともまともじゃないというのか?

Repeaterのネストは本人も方法として言ってる
簡単かどうかは考え方によるだろうが
データセットにリレーション張ってRepeaterネストさせるぐらいなら、
日付ブレークの判定いれる方が簡単だと思うがな

381:nobodyさん
09/05/27 12:58:36
VWD 2005 Express Editionを使ってます。

GridViewに編集ボタンを付けて実行し
編集ボタンをクリックすると、下記のエラーメッセージが出ます。

「使用されている SQL Server のバージョンでは、データ型 'date' がサポートされていません。」

スタック トレースを見ても意味が分かりません。

何処を直せば、あるいはパッチの追加インストールとか必要なのでしょうか?

382:nobodyさん
09/05/27 13:04:36
どういうデータをどうバインドしてんだよ、こんちくしょうが。

383:nobodyさん
09/05/27 13:07:41
>>378
設定してすぐにテーブルを開くと表示されてるのは、
全部のフィールドがNULLになってると思うけど、
これは新規に行を追加するところだから

何かしらを入力(ID以外のデータ)してenterキーを押して決定すると
新しい行がデータベースに追加され、IDが表示される

384:nobodyさん
09/05/27 13:09:52
>>381
わかんないけど、日付を表示させようとすると、
そういうエラーが発生するんだよ

ソースを表示するとGridView内にタグにdbtype="date"みたいな
表示がかかれてるところがあるから、そのdateをdatetimeにすると
正常に表示される。

編集や削除を許可してるなら、その数のぶんだけあるから
複数修正すること

385:nobodyさん
09/05/27 13:33:53
>>384
できました!なじゃこりゃw

ありがとうございます!バグなんですかねこれって?

386:nobodyさん
09/05/27 13:40:46
DB側の仕様が変わったのについてこれないんだろうぁ

387:nobodyさん
09/05/27 14:08:08
>>385
IME ga kowareta ze ww
tabunn kono fix program jya ne?
install shitara kekka houkoku plz

URLリンク(connect.microsoft.com)

388:nobodyさん
09/05/27 21:23:09
あなるせっくすしたい

389:nobodyさん
09/05/28 17:38:31
すみません。あちこちググってもわかりませんでした。天才様、お願いします。

asp.net(1.1)webサイトAがあります。
これは現在順調に動いています。
アプリケーションルートはwwwrootにあります。

ところが、このサイトを携帯サイトにも対応させようということになり
wwwroot直下にmovileというアプリケーションを登録し、元のサイトのコードをすべてコピーしました。
現在はまだここまでで、携帯にhtmlをコーディングし直しているわけではなく、PCで閲覧してテスト中です。

データベースからのデータを得る部分はwwwroot直下の別アプリケーションwevserviceを参照しています。
これはコピー元、コピー先ともに同じです。

ところが、単なるポストバックプログラムは動くようになったのですが、wevseervicceを参照している部分だけ

>>System.Net.WebException: 操作がタイムアウトしました。

エラーが出ます。web.configはすべてコピー元と同じ設定にしてあるのですが、movileアプリケーションだけが
エラーを出します。
どこかに同一サーバー内の別アプリを区別するセキュリティやタイムアウトの設定があるのでしょうか?

ヒント、誘導でもいいのでお願いします。

390:nobodyさん
09/05/28 17:53:13 wAV+Bwsc
すみませんageさせていただきます。レスお願いします。

391:nobodyさん
09/05/28 18:43:17
わかんないけど、単にディレクトリ掘っただけならweb.configまでコピーする必要ないんじゃないのかな

IISサービスマネージャ(スナップイン?)で、新たなアプリケーションを追加(仮想ディレクトリの追加?)を
追加して新しいサイトとしてやってみるのは試してみた?

どこで処理が止まってるかデバッグで確かめて、
その接続がなんでいかないかを考えたほうが早いようなきもするけど。

あとmovileじゃなくてmobileね

392:nobodyさん
09/05/28 19:08:30 wAV+Bwsc
>>391
ありがとうございます。
web.configをコピーしたのには、将来的にcookieless=trueとして携帯サイトとしてクッキー対策するためと
ログイン画面への遷移を指定するためで、どちらもアプリケーションルートのweb.configのみという制約があるのです。

処理が止まっているのはwebサービスの応答待ちです。
webサービス側はまったくリクエストが届いていない感じです。
サーバー内には目立ったエラーログはありません。

393:nobodyさん
09/05/28 19:13:32
なので、一つ一つ試してみたら?
web.configがなかったらどうかとか、
webサービスがなんで動作しないのか、
可能性を一つ一つ試して排除してみるしかないと思う。

asp.net 1.1 とwebサービスの特有の何かしらの症状なら、
あまり利用したことがないから想像がつかないけど。

394:nobodyさん
09/05/28 19:21:36 wAV+Bwsc
>>393
ありがとうございます。

なるほど!テストしてみます!

395:nobodyさん
09/05/28 19:27:17
>wwwroot直下にmovileというアプリケーションを登録し、元のサイトのコードをすべてコピーしました。
>データベースからのデータを得る部分はwwwroot直下の別アプリケーションwevserviceを参照しています。
ああ、別アプリに登録してるのか。
それだと、webserviceが共通で利用できない可能性ってないのかな?

俺が勘違いしてるね。スマン


396:nobodyさん
09/05/29 02:19:51 DlIDf9OB
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

Debug.WriteLine(Session.SessionID)

End Sub


↑のように書いてページにボタンを置いてポストバックしてみると、毎回違う値が出力される。
SessionIDってそういうものなの?
セッションIDなんて名前なんだから同一セッションの場合は同一の値が返ってくるものと思ってた。

397:nobodyさん
09/05/29 03:05:08
>>396
同じだよ
クッキーが無効になってる
とか
URLリンク(support.microsoft.com)
とか

398:nobodyさん
09/05/29 08:10:07
Calenderを使って日付けを入力することは簡単にできるのですが、例えば
TextBoxに「2001/6/1」と入力して、それをカレンダーに反映させるにはどうすればよいのでしょうか?

今月じゃない日付を選ぶ場合、月をクリックして前月、前月と繰り返し再表示させなくてはならず、
年月日をダイレクトで指定し、そのカレンダー上に日付に関連する情報を表示(日付を赤バックにする)し
内容を確認できるようにしたい。
最終的に日付の入力はDropDownListで入力する予定です。

399:nobodyさん
09/05/29 11:09:25 I+rUeGmY
>>395
いえいえ、とんでもありません。
>webserviceが共通で利用できない可能性
やはりことあたりが疑わしいので、webサービスに接続しているアカウントなどを
追ってみたいと思います。

400:nobodyさん
09/05/29 14:01:33
>>398
DateTime dateTime;
if (DateTime.TryParse(this.TextBox1.Text, out dateTime))
 this.Calendar1.VisibleDate = dateTime;



401:nobodyさん
09/05/29 23:31:08
>>163
もう解決済みかもしれんが、亀レスしておく。ASP.NET のワーカー
プロセスは以下のタイミングで再起動する。
・Web.config や Machine.config の更新
・bin 以下のコンテンツの変更(アセンブリ)
・*.aspx 等のコンテンツの変更多数
・なんか具合が悪い時(ぴゅう!)
よって、InProc モードを使っているとタイムアウトしていないのに
データが失われるという不可解な現象に悩まされることになる。
これがデフォルトの動作モードというのはもはや犯罪。いくら速くても
データがロストするんじゃね。

ということで、Session に重要なデータ保存するなら、InProc を使っては
いけない。つまり、ASP.NET 2.0 以降を使うべき。ただ StateServer などを
使う場合には Session に格納するオブジェクトに Serializable 属性が必要
になるので要注意。

402:nobodyさん
09/05/30 00:27:53
>>401レスどうもです。

原因は、>>241でして、
どうしようもない状態です。
iis 8007006dでググルと事例は
やたら出るが、対処方がみつからないです。

InProcを利用すべきでない等も
理解しているのですが
変えられない状況です。


403:nobodyさん
09/05/30 00:32:22
InProcでないといけない理由って?


404:nobodyさん
09/05/30 00:37:39
複数部署のアプリが混在している
1つのプロジェクト構造の為、
自部署のアプリのみをソースレベルで
慎重に分離して、StateServer対応の為、
シリアライズの部分を慎重に見直して、
全再テストする工数が莫大だからです。



405:nobodyさん
09/05/30 00:47:53
セッションを他の部署でも使ってるっから自分のとこだけでは変更できないてこと?
あれから18日も経ってるけど解決できてないんだね。ご苦労様です。

サーバの再インストールとかやってみた?
どっちにしても、そのままだとシステムとして成り立たないから、
何が原因か、サーバなのか、プログラムなのか、
結果的に全部署で再テストする必要が出てきそうだね。カワイソス

URLリンク(www.google.co.jp)
World+Wide+Web+%E7%99%BA%E8%A1%8C%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%A7%E8%87%B4%E5%91%BD%E7%9A%84%E3%81%AA%E9%80%9A%E4%BF%A1%E3%82%A8%E3%83%A9%E3%83%BC%E3%82%92%E6%A4%9C%E5%87%BA%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82+&btnG=
Google+%E6%A4%9C%E7%B4%A2&lr=&aq=f&oq=

406:nobodyさん
09/05/30 01:25:38
>>402
iis 8007006d でぐぐると、日本語では1件しか表示されない
MSのサポート情報の機械翻訳で日本語があれだが、エラーの原因が書いてある
そこに書いてある対処方法は当然ためしたか、該当しないか確認したんだよな?


407:398
09/05/30 04:44:22
Protected Sub Calendar1_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Calendar1.SelectionChanged
 'カレンダーの日付を選択すると、「選択した日付」を表示(確認)
 lblSelectedDay.Text = Calendar1.SelectedDate.ToShortDateString
End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
 'ページロード初回のとき、「今日の日付」を表示
 If Not IsPostBack Then
  lblToday.Text = DateTime.Now.Date.ToShortDateString
 End If
End Sub

Protected Sub btnChandeDay_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles btnChandeDay.Click
 '「日付変更」ボタンをクリックしたとき、「今日の日付」を表示
 Calendar1.VisibleDate = Convert.ToDateTime(txtInputDay.Text)
 lblChangedDay.Text = txtInputDay.Text                   '入力した日付をラベル表示(確認)
 lblChangedDay2.Text = Calendar1.SelectedDate.ToShortDateString '選択した日付をラベル表示
End Sub

という感じで作ってみました。
extBoxに「2001/6/1」と入力して、それをカレンダーに反映させる、については
>Calendar1.VisibleDate = Convert.ToDateTime(txtInputDay.Text)
によって該当月のカレンダーが表示されますが、日付の選択状態が実行されません。
指定した日付を選択状態にするにはどうすればよいのでしょうか?

408:nobodyさん
09/05/30 05:15:58
>>407
>指定した日付を選択状態にするにはどうすればよいのでしょうか?
普通にCalendar1.SelectedDateにセットすればいいだけの気がするんだが、
これって読み取り専用か?

409:nobodyさん
09/05/30 06:09:32
そんだけ動いてるってことはサーバの負荷が大きくなってプロセス再起動してる感じかなぁ…
ロードバランサ使って負荷分散するとかしないと厳しそうな気もするけど・・・
監視ソフトでも入れて負荷みないとなんともいえん

410:nobodyさん
09/05/30 06:17:21
Calendar1.VisibleDate = Convert.ToDateTime(txtInputDay.Text)
Calendar1.SelectedDate = Convert.ToDateTime(txtInputDay.Text) ←追加
lblChangedDay.Text = txtInputDay.Text
lblChangedDay2.Text = Calendar1.SelectedDate.ToShortDateString

>Calendar1.SelectedDate = Convert.ToDateTime(txtInputDay.Text)
を追加したら上手くいきました。ありがとう!

411:nobodyさん
09/05/30 07:12:47
>これがデフォルトの動作モードというのはもはや犯罪。いくら速くても
>データがロストするんじゃね。

むしろデータがロストしても致命的にならないくらい
セッションをできるだけ使わないのがおすすめだけどな。
おれはセッションにはせいぜいリダイレクトの瞬間のやりとりデータしか入れないぜ。


412:nobodyさん
09/05/30 11:10:13
データの受け渡しをするにしても、必ずSerializableなクラスを渡すようにするのがいいね
設計段階で、Selializableな基底クラスを用意して、それを継承したクラスのメンバ変数で
値を持つようにして、それをsessionで受け渡しすればいい。
InProcで問題が発生してStateServerの利用になっても問題無く移行できる。

413:nobodyさん
09/05/30 11:48:58
Serializable属性は継承されません

414:nobodyさん
09/05/30 11:53:13
ん、そうなの?
継承クラスでそのままSerializableできたけどなんでだろう?

415:nobodyさん
09/05/30 12:56:14
>>413
Silializerだと駄目だね
SessionとかだとSerializable属性なしでも通るのか。
知らなかった。サンクス!


416:410
09/05/30 14:29:16
MasterPage上の表の左コラムに、>>407,410で作ったカレンダーを貼り、
日付を選択したら、表の右コラムのContentPlaceHolder1に関連情報(Result.aspx)を表示する。

というのを作成しました。
Server.Transfer("Result.aspx?targetDay=" + Calendar1.SelectedDate.Date)
これで対象となる日付を引き渡し、該当する関連情報を表示するところまでできたのですが

なぜかカレンダー表示がその都度初期値(今日の日付を含む月)に書き換えられてしまいます。
選択した日付を含む年月のカレンダーを表示し、且つ選択した日を選択表示にするには
どうすればよいですか?

417:nobodyさん
09/05/30 14:45:21 yVbH19hK
もう、やりたいこと全部コメントに書いてプロジェクトごとアップロードしたら?
俺は落とさないけど。

418:nobodyさん
09/05/30 15:27:24
よくわからんけどVBって日付の妥当性チェック無しでConvertしても許されたり
stringにDateTime突っ込んだりしても推測して型変換してくれるの?

419:nobodyさん
09/05/30 15:37:08
普通にブラウザの戻るボタンで戻ると、ちゃんと日付が反映されてるよ
戻るボタンでもAJAX使ってると今日の日付にもどっちゃうけど

ただ単に同じページに戻っただけなら、初めてページを表示させるのと同じだから
表示の日付も今日の日付になってるというのは当たり前の話。
日付を選択して違うページに移動し、再び日付選択ページに戻った時、
その日付を維持したいのなら、セッションかクッキーを使用するか、
GETかPOSTで日付データを渡して値を設定するしかない。

420:410
09/05/30 16:12:33
MasterPage

 表左コラム   | 右コラム
          | 
 カレンダー   | 該当年月日に属する情報
 Calendar.ascx | Result.aspx

こんな感じで、カレンダーで選んだ日付に属する情報を表の右コラムに表示する。

Server.Transferを使うことで、選択した年月日の情報を表示することはできました。
ところがResult.aspxが表示された瞬間、Calendar.ascxのカレンダーが初期年月に戻ってしまう。

カレンダー上に、右コラムで表示された情報の日付が選択された該当月が表示されたままにしておいて
同月の前後その他の情報を続けて表示確認したい。

マスターページに共通の見た目のデザインを設定し、この上で
Webユーザーコントロールから必要な項目を選択し、Webフォームに見たい情報をデータベース検索し表示する。
みたいなことができるような仕組みを作ろうかと思っています。

421:nobodyさん
09/05/30 16:47:09
マスターページとかめんどくさそうだなw

422:nobodyさん
09/05/30 17:07:38 yVbH19hK
>>420
ちょっと危険なコーディングだがMasterPage側での処理ということで。
URLリンク(teke348.dyndns.tv)

カレンダーなんて、そのうち「ある場合ではこうで、そうでない場合はこう」
とか色々制限がつきやすいものだから、それ自体をユーザーコントロールにした方が吉。

423:nobodyさん
09/05/30 20:25:01
>>422
優しいね
ソース眺めて(・∀・)ニヤニヤしようかな(・∀・)ニヤニヤ

424:nobodyさん
09/05/30 20:35:56
(・∀・)ニヤニヤしようと思ったらVBだからよくわからんかったわw

425:nobodyさん
09/05/31 03:44:11
フォーム認証のメリットって何?ベーシック認証じゃ駄目なん?
認証受けずにページを表示しようとしたら指定のページに強制的に飛ばされる、つーのは
便利だと思うけど。

426:nobodyさん
09/05/31 04:17:10
認証方法はユーザIDとパスワードの組み合わせだけだと思うか?

427:nobodyさん
09/05/31 14:48:59
ベーシック認証に他のやり方があるかどうかわからないけど、
Windowsのアカウントユーザを追加してIDとパスを設定しなくちゃいけないから面倒だからじゃない?
apacheとかでも動的に.htaccessとかにユーザを追加管理しなきゃいけなから
面倒だったと記憶してるんだけど。
フォーム認証ならデータベース等を利用して動的にユーザの追加や削除ができるでしょ。



428:nobodyさん
09/05/31 17:35:56
まあ、ASP.NET側で自分で独自に処理してやれば、BASIC認証でも自由にやれる。
けどわざわざやる価値はあんまりないわな。


429:410
09/06/01 17:45:43
>>422
どうもありがとうございます。
MasterPageに複数のWebコントロールを載せて、結果をDefoult.aspxに表示するというコンテンツを作ると、
Sessionを使うと煩雑になるのと、時系列的にPageを切り替えていくのならOKですが、それぞれの
Webコントロール(上のデータ表示)に、同時に反映させるのが難しいかと思いました。

結局、MasterPage画面に配したWebコントロールページに同時にServer.Transferを送ることで
画面上のデータをすべて同期させることができることが解りました。
VIEWSTATEが少し冗長となりましたが。

またアドバイスお願いします。

430:nobodyさん
09/06/02 22:10:04
>>418
int型へのキャストで以下が成立する言語
CInt("+2,7,42,4,6,") = 274246
#全角は入力間違いをしている訳ではない


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch