トップページphp
986コメント449KB

【質問】ASP.NETスレ Part4【議論】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2007/07/17(火) 23:49:46ID:pyJr9yIy
●過去ログ
Part1 - 【質問】 ASP.NETスレ 【議論】
http://pc5.2ch.net/php/kako/1040/10406/1040698263.html

【質問】ASP.NETスレ Part2【議論】
http://pc8.2ch.net/test/read.cgi/php/1111480331/

【質問】ASP.NETスレ Part3【議論】
http://pc11.2ch.net/test/read.cgi/php/1160355849/
0153nobodyさん2007/09/24(月) 16:52:06ID:???
Imports Oracle.DataAccess.Client

Public Shared Function OracleRead(ByVal wSql As String) As Object
cnn = New OracleConnection
cnn.ConnectionString = "hogehoge"
cnn.Open()
cmd = New OracleCommand
cmd.Connection = cnn
cmd.CommandType = CommandType.Text
cmd.CommandText = wSql
OracleRead = cmd.ExecuteReader
End Function

こんな感じの繋ぎ方で、Oracleに接続して結果セットを得ているのですが、この結果セットの
フィールド名はこのオブジェクトから得ることができるのでしょうか?

Dynasetで結果を得ていたときは 結果セット.FieldName(i).ToString で得られていました。
同じようなプロパティはあるのでしょうか?
0154nobodyさん2007/09/24(月) 22:53:03ID:???
>>153
そのreturnのObjectを素直にOracleDataReaderに
してるのならGetNameで。
DataAdapterで変換してるのなら変換後の型の
メンバをMSDNで調べてください。
0155nobodyさん2007/09/25(火) 16:35:24ID:???
ASPの質問というよりwebサービスに対する質問なんですが.
VS2005でクライアントの「WindowsFormアプリ」と「Asp.NETWebサービス」を(ともにC#)
共存させるソリューションを作っているのですが,

クライアントの参照設定->右クリック->Web参照の追加
で「Asp.NETWebサービス」を追加したのですが,
[WebMethod]で指定した関数を呼び出すことができません.
WebServiceのクラスがMySeriviceの場合

MyService ms = new MyService();
はエラーを吐かずに実行できるのに.
string str = ms.HelloWorld();
は次のエラーと警告を出します.
・無効なトークン '(' が クラス、構造体またはインターフェイスのメンバ宣言で使用されています。
・WebServiceBindingAttribute が プロキシ クラスで必要です。

WebServiceBindingAttribute をどのように作成すればいいでしょうか
0156nobodyさん2007/09/25(火) 18:01:48ID:???
>>155
単なるコンパイルエラーだと思うけど。
HelloWorldの中身の"("付近を見直してみれば。
01571552007/09/25(火) 18:24:50ID:???
>>156 さん 反応どうもです

    [WebMethod]
    public string HelloWorld()
    {
        return "Hello World";
    }

これがWebMethodのコピペです,
間違ってはないと思うのですが

MyServiceを参照する際,
MyS まで入力して「Ctrl+Space」を押すと候補一覧に「MyService」が表示されるのですが.

MyService ms = new MyService();
をした後
m まで入力して候補を探しても 「ms」 は見つかりませんでした.
もちろん ms まで入力して「.」を押してもメソッド一覧が表示されませ.

しかしオブジェクトブラウザでMyServiceを見たらHelloWorldメソッドが登録されているので,
なんだかもうわからない状態です...
0158nobodyさん2007/09/25(火) 20:54:14ID:???
http://localhost/MyService/Service1.asmx の場合
localhost.MyService ms = new localhost.MyService(); のように指定した気が
01591532007/09/25(火) 21:00:40ID:???
>>154
サンクスです。
GetNameで取れました。
01601552007/09/25(火) 21:24:54ID:???
>>158 さん はんのうありがとうです.

usingを指定して,すでに名前空間は解決しているつもりでした.

名前空間と言えば
[WebService(Namespace = "http://kaigen.org/";)]
WebServiceで記述されているこれは使用するのでしょうか?
01611552007/09/26(水) 03:15:18ID:???
自己解決?しました

WebServiceクラスを呼び出しているところを
普通のクラスファイルじゃなくて,
Windowsフォームテンプレートを用いで作成したクラスからなら
呼び出せることがわかりました.

原因は不明ですが,とりあえずこれで動くので,
これで作成しようと思います.
0162nobodyさん2007/09/26(水) 15:32:27ID:???
継承しているクラスくらい見ろよな
0163nobodyさん2007/09/26(水) 21:02:25ID:yYWQHXI+
次のようなイメージでTreeViewのノードを動的に追加できるASP.NET2.0 Webアプリを
作成したいと思っています(使用言語C#)。

  ブラウザの左側にTreeviewを表示(例menu.aspx)し、上位ノードを右クリック
  して「新規作成」をクリックすると、新たなノードを作成するために必要な
  パラメタの入力を促すウィザードまたは入力可能なダイアログを表示する。
  新たなノードを作成する際にパラメタとして、ノード名、DB名、Table名程度を
  入力し(それ以外はシステムで決まっている値とする)、サブノードが出来上がる
  というかんじです。右側はGridViewでDBのテーブルを表示します。

左側(menu.aspx)をどうすればよいか悩んでいます。
参考になるサイトがあれば教えてください。またご存知であればご教授ください。
よろしくお願いします。
0164nobodyさん2007/09/26(水) 22:57:49ID:???
>>163
技術が無いんなら「自分でできる」所までまずは
作りましょう。それから出来ない点のみを質問しましょう。

改造は必要だがこの辺を参考にしてください。
ttp://www.codeproject.com/aspnet/xtreeview.asp

自作するなら、Treeviewを表示→(右クリック→メニュ)→(ダイアログ)→ポストバック
→Treeviewを更新で括弧以外簡単だと思うが。

リンクの右クリックメニューはライブラリあたりで、右クリック時にノード情報退避して、
ダイアログは別ウインドウかレイヤ(<div>タグにstyleでPOSITION:absolute)あたりで
表示させれば良いと思います。

面倒なら商用が色々とありますので購入してください。
ttp://www.componentsource.co.jp/products/telerik-rad-treeview/index.html

0165nobodyさん2007/09/26(水) 23:27:43ID:???
>164
うわっ!スゴイ!!十分に参考になります。
codeproject.comは知っていましたが、辿り着けなかった・・・。
商用のものはすごいですね。資金がないため購入はできませんが
とても参考になります。本当にありがとうございました。
0166nobodyさん2007/09/27(木) 05:38:58ID:7u8fuvQl
テキストボックス内でキーボードのEnterを押したら、ボタンが押下されたようにしたいです。

テキストボックスのonkeypressでEnterを捕捉し、ボタンが押下されたときのサーバ側のイベントを呼ぶように
クライアントスクリプトを書こうと思ったのですが、よく分かりません。

- サーバ側のイベント
void btnExecute(object sender, EventArgs e){
  //proc
}
- テキストボックスでEnerキーが押されたときにコントロールを指定してポストバックする
<asp:TextBox 。。。 onkeypress="if(エンターキーが押された)__doPostBack('btnExecute');"></asp:TextBox>

のようにすればいいのかな。と思ったのですがうまくいきませんでした。
クライアントコールバックではなく、単純にボタンを押されたときと同じにしたいのですが
どのようにすればよいのでしょうか?
0167nobodyさん2007/09/27(木) 10:41:16ID:???
>>166
<asp:Button>はUseSubmitBehavior="False"でない時、
HTML上は<input type="submit">で出力されますがこの場合
他のコントロールと異なり直接「__doPostBack」は呼ばれずに
formのSu・・・・・・・・・めんどくせ。

興味があるんなら自分で調べてみてください。

で、UseSubmitBehavior="False"にして__doPostBackするなり
ASP.NETのjavascriptのイベント処理で解決する事も可能だが
一番簡単なのはコントロールを直接クリックすればいいだけ。

.Net側
text.Attributes("onkeypress") に "aaa('"+ Button.ClientID "+)"

javascript
function aaa(objName) {
if(エンターキーが押された) document.getElementById(objName).click();
}

.Net側はHTML上のボタンのID名を取得の為に処理しているだけなので、
aspxの<asp:TextBox onkeypress="ここ"だけに入力したいとか言われそうだが
それも可能なので調べてみてください。
01681662007/09/27(木) 22:07:24ID:7u8fuvQl
詳細な説明ありがとうございます。
ClientID=エレメントのIDなページ構成なので
asp:TextBoxに
onkeypress="if(エンターキーが押された) document.getElementById(''btnExecute').click();"
で対応できました。


サーバ側でプログラムでJavaScriptを書くのってTry&Errorし辛くて不便ですよね
スクリプト内部もタイプセーフ(JavaScriptセーフ?)に書ければいいのに。と思った。
0169nobodyさん2007/10/02(火) 00:54:30ID:???
ASP.net2.0+AJAX.net2.0+C#で開発しています。
TreeViewについて質問させてください。

[質問内容]
UpdatePanel内にTreeViewを配置した時にTreeViewのPopulateイベント
で同一UpdatePanel内の別のコントロールに値をセットできません。
ViewStateも利用できない状態です。

他に、Populateイベントを有効にするとTreeNode以外のボタン押下時
イベントも同時に動いてしまうのも悩みです。

どなたか同じような問題を解決した方がいましたらご教示ください。

宜しくおねがいいたします。
0170nobodyさん2007/10/02(火) 20:58:52ID:???
>>169
同一UpdatePanel内のPopulateイベントで
Me.TextBox1.Text = e.Node.Text
で試してみたがセットできるんだが。

まぁ、そもそも
ttp://cs.gogo-asp.net/blogs/naoki/archive/2007/01/24/UpdatePanel-_B330F330C830ED30FC30EB300A4E67302952287567304D306A304430B330F330C830ED30FC30EB30_.aspx
と言うように正確な情報も無ければ、解決には様々な要因が絡むパターンなので
関連する部分のソースでも無い限り答えるのは無理だけどね。
リンク先の対応策をよく理解してから自分で調べるといいと思います。
0171nobodyさん2007/10/02(火) 23:20:01ID:???
>>170
ありがとうございます。

単純な事でしたが、EnableClientScriptがtrueになっている事が原因でした。

EnableClientScriptをfalseにする事でコントロールに値をセットする事や
ViewStateに値をセットする事ができました。

今回はPopulateイベントで別のコントロールに値をセットするという仕様
でしたが、一度展開したノードではPopulateイベントが発生しなく
なるため、2度目以降のノード選択時に別のコントロールに値をセット
できなくなってしまったので、Expandedイベントを利用しました。

PopulateイベントからノードのPopulateOnDemandプロパティにtrueを
設定しても一度展開された扱いになってしまい現象変わらず。
(該当ノードを削除して再度同じノードを作成すればいいかも知れま
せんが次にコードを見た人がつら過ぎるコードになるので実装せず)
0172nobodyさん2007/10/04(木) 14:17:51ID:HVPnYgkb
PHPしかやったことないのですがASPをやろうと思ってます
PHPユーザにお勧めの言語があれば教えてください


UNIXが優位だったからPHPをはじめたのにいつのまにかWINDOWSに抜かれてるなんてorz
0173nobodyさん2007/10/04(木) 17:55:01ID:???
PHPしかやったことが無い とか関係あるか分からないけど
ASP.NETなら C#とJavaScriptやっとけばいいんじゃない?
0174nobodyさん2007/10/04(木) 22:00:36ID:???
C#が解説とサンプル多くていいと思うよ。
VB.NETも同じくらい多いけど、言語的にはC#のほうがPHPに近い。
0175nobodyさん2007/10/05(金) 05:43:34ID:???
PHP ≒ Java ≒ C♯

VB糞
01761722007/10/05(金) 15:38:56ID:???
レスおそくなってすみません

>>173-175
レスどうもありがとうございます
C#のほうが近いとのことなのでC#でいきたいと思います
帰ったら開発環境とIISインストールして早速遊ぼうと思います
0177nobodyさん2007/10/06(土) 03:15:56ID:???
パラメータソースとしてWebUserControlのプロパティを使いたいんだけど
バインド画面のリストに表示するようにするには、どうしたらいい?
属性?それともインターフェイス?
0178nobodyさん2007/10/06(土) 11:40:13ID:???
>>177
質問の意図が「プロパティを使いたい」のか「リストに表示したい」のか
分からんけどControlParameterのPropertyNameで選択したリストに
表示されなくても直接UserControlで作成したプロパティ名を入力すれば
使えたはず。

リストに表示したいと言うのも出来たはず。
おれは動的にControlParameterを発生させるので、ど忘れして思い出せない。

って、事でこのスレの詳しい人に任せます。
01791772007/10/06(土) 22:11:06ID:???
>178
thxです。コレ手書きOKなのね。
さらにリストから選択できれば言うことないので、誰かヒントお願いします。

ちなみに Control にしたとき、下記のようにコントロール名が2行づつ表示されるのは常識なんですか?

GridView1
GridView1
0180nobodyさん2007/10/06(土) 23:14:35ID:???
WebUserControlのイベントってデザイナで指定できないのですか?
0181nobodyさん2007/10/07(日) 00:39:00ID:???
だれかエスパーを
0182nobodyさん2007/10/07(日) 02:05:08ID:???
>>180
プロパティウィンドウの使い方が分かってないんじぇね?
プロパティウィンドウ最上部の雷マークで切り替えてイベント追加できるから
0183nobodyさん2007/10/07(日) 23:25:26ID:???
WebUserControl使ったことあるやつなら >>180 が言ってることわかるだろ。
ちなみにC#な。
0184nobodyさん2007/10/07(日) 23:30:53ID:???
わかるんなら答えてやれよw
01851802007/10/07(日) 23:47:37ID:???
>>181
>>182
説明がわるくてすみません。
自作のWebUserControlをWebFormに貼り付けると、イベント・プロパティとも
プロパティウィンドウに表示されません。(雷ボタンも表示されない)
ちゃんとpublicプロパティやイベントは書いてます。

>>183
ということはC#ではできないのですかね?
0186nobodyさん2007/10/08(月) 03:27:19ID:???
ああ、ユーザーコントロールの枠で選択されちゃって、個々のコントロールが操作できないやつね。
あれはだな、・・・
0187nobodyさん2007/10/08(月) 16:21:04ID:???
↑なんか概念的に間違ってるぞおまえ
0188nobodyさん2007/10/13(土) 12:20:47ID:cIDXI8N9
初歩的な箇所で申し訳ないのですが質問させてください

ASP1.0でフォーム認証を試そうとして↓をWeb.Configに

<authentication mode="Forms" >
<forms loginUrl = "login.aspx" />
</authentication>

<location path="checkout.aspx">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>

を追加したのですが”構成セクションlocationを認識できません”とエラーになります
何が原因でしょうか
0189nobodyさん2007/10/13(土) 15:53:32ID:???
>>188
単純に、locationが認識できないと言う時のエラーだから、
location要素の書く位置間違ってるんじゃねーの?
configurationの直下に書いてるか?

とりあえずは、Web.Configを省略せずに書いてもらわんと分からん。
0190nobodyさん2007/10/13(土) 20:41:18ID:cIDXI8N9
>>189
Web.ConfigのXML自体あまり理解できていないと思うので答えが曖昧かもしれませんが
一応<configuration>のステートメント内には収まっていると思います

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>

<compilation defaultLanguage="c#" debug="true" />

<customErrors mode="RemoteOnly" />

<authentication mode="Forms" >
<forms loginUrl = "login.aspx" />
</authentication>

<location path="checkout.aspx">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>
0191190続き2007/10/13(土) 20:45:39ID:cIDXI8N9
<trace
enabled="false"
requestLimit="10"
pageOutput="false"
traceMode="SortByTime"
localOnly="true"
/>

<sessionState
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;user id=sa;password="
cookieless="false"
timeout="20"
/>

<globalization
requestEncoding="utf-8"
responseEncoding="utf-8"
/>
</system.web>
</configuration>
01921882007/10/13(土) 20:53:54ID:cIDXI8N9
>>189
できました!
本当にconfiguration”直下”なんですね
ご教示有難うございます。
どちらにしても、このXML自体あまり理解できていないようなので
勉強しなおしてみます。
0193nobodyさん2007/10/13(土) 21:04:39ID:???
>>190
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <system.web>
  <compilation defaultLanguage="c#" debug="true" />
  <customErrors mode="RemoteOnly" />

  <authentication mode="Forms" >
    <forms loginUrl = "login.aspx" />
  </authentication>
  <trace ・・・ />
  <sessionState ・・・ />
  <globalization ・・・ />
 </system.web>

 <location path="checkout.aspx">
  <system.web>
   <authorization>
     <deny users="?" />
   </authorization>
  </system.web>
 </location>
</configuration>

VS2005だから.net2.0でしか確認できんけど、で、いけると思う。

locationの配下に無い<system.web>はサイトルートを含む全ての
ファイルとフォルダに対する指定だから<location path="ルートパス">が
指定されてる意味になるから、その中に<locationが入れ子されると
意味不明な指定になる。

0194nobodyさん2007/10/13(土) 21:06:25ID:???
更新していなくて余計なレスしちまった。

01951952007/10/15(月) 04:26:21ID:1vOjoM00
環境は以下です。
VS2005
VB.net
ASP2.0(だと思います)

なぜか*.aspxの他に自分で追加した*.vb内のClass内で"テスト"のように「""」で括った文字列が
文字化けの状態で変数に格納されてしまい困っています。

ファイル名:Class1.vb
Imports Microsoft.VisualBasic
Public Class Class1
Public Function func() As String
Return "テスト"
End Function
End Class

ファイル名:default.aspx
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim s As String
s = "テスト"
Diagnostics.Debug.WriteLine(s)
Dim cls As Class1 = New Class1
Diagnostics.Debug.WriteLine(cls.func())
End Sub

出力内容
テスト
?e?X?g
01961952007/10/15(月) 04:27:11ID:1vOjoM00
「?e?X?g」が文字化けでなぜか「テスト」と表示されないので悩んでいます。

前提条件としてDBにアクセスするためDataSet1.xsdがプロジェクトに追加してあります
これに付随してweb.configに以下の内容を追加してあります
追加内容:<globalization requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8"/>
理由:DataSet1.xsdを作成するとコンパイルエラーが発生したため
コンパイルエラーの内容:エラー 1 入力 xml ファイルの内容を DataSet に変換できません。名前の先頭に '0' (16 進数値 0x30) を使用することはできません。 行 32、位置 168 です。 C:\Users\*****

プロジェクトからDataSet1.xsdを削除し、関連コードを削除し実行すると文字化けはなくなりますが、
DBを使用するためそれはできないです。

また、default.aspx内にClass1の定義を貼り付けたら問題なく表示されますが、
なぜか別ファイルに分離(Class1.vb)すると文字化けします。

まとめますと上記のサンプルコードは単体では再現せず、
DataSet1.xsdにテーブル定義を追加し、コンパイルエラー回避のためglobalizationを追加すると再現するようになります。
この状態ですと自分で追加した*.vb内でDim s As String="テスト"をすると
sに文字化けしたものが格納されます。

1週間ほど悩みましたが全く進展がなく暗礁に乗り上げました。
ご存じの方お教えいただけませんか?
よろしくお願いします。
0197nobodyさん2007/10/15(月) 06:28:13ID:???
fileEncoding="shift_jis" にすると解消するというオチでは。。。
globalization requestEncoding="utf-8" でググったら最初に出て来た。
0198nobodyさん2007/10/15(月) 12:31:20ID:???
>>195
なにも理解せずにデータセット「.xsd」の不具合対策を入れたんだろうな。
<globalization requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8"/>

VB.NETの場合、.aspxや.aspx.vbは(デフォルトなら)HTMLをUTF-8で出力する
関係上、文字コード「UTF-8 BOM付き」で保存されるんだが、「新しい項目の追加-クラス」で
追加された「Class1.vb」は、文字コード「Shift-JIS」で保存されます。
(「新しい項目の追加-クラス」の「Shift-JIS」はVSのバグっぽいが)

このように.aspx.vb「UTF-8 BOM付き」、Class1.vb「Shift-JIS」と文字コードが混在していても
通常は動作する時に文字コードを自動判別するので問題は起きないのですが、
<globalization fileEncoding="utf-8"/>を追加すると、プロジェクト内の全てのファイルを「utf-8」
で読もうとする為、当然「Shift-JIS」で保存されているClass1.vbの2バイト文字は化けます。

余談だが、レコードセット「.xsd」の不具合の方もこれに若干似ていて、「UTF-8 BOM無し」で保存
されるから日本語のフィールドやテーブル名があると起きる。

上記から導き出せる解決策

1.globalizationで「.xsd」の不具合修正を追加したまま「Class1.vb」を「UTF-8 BOM付き」にする。
2.globalizationを削除して、「.xsd」を「UTF-8 BOM付き」で保存する。
3.globalizationを削除して、「.xsd」と「Class1.vb」を「UTF-8 BOM付き」で保存する。

他にも方法はあるがこの中から選べばいい。
(「.xsd」はShift-JISで保存でも解決したり)

文字コードの変更方法は、テキストエディタでも良いしVSからなら
該当ファイルを開いて「ファイル-名前をつけて保存-保存ボタン右の▼-エンコードつきで保存-エンコード」
01991952007/10/16(火) 21:26:18ID:???
>>197
>>198
おかげさまで無事解決しました。
対処としては
>2.globalizationを削除して、「.xsd」を「UTF-8 BOM付き」で保存する。
これを選択しました。
>3.globalizationを削除して、「.xsd」と「Class1.vb」を「UTF-8 BOM付き」で保存する。
こちらについては
globalzationを消し去ったことでClass1.vbのShift-JISを自動認識して読み込んでくれているから
だと思うのですが特にUTF-8 BOM付きに変換しなくともく正常に動作しました。
ありがとうございました。
0200nobodyさん2007/10/17(水) 00:16:33ID:???
>>199
悪い行数制限に引っかかりそうだったので省略したが、なんでわざわざ「3.」の
選択肢も書いたかと言うと、C#だと「新しい項目の追加-クラス」で作成したファ
イルはデフォルトで「UTF-8 BOM付き」になる。
マイクロソフトが不具合と認めている報告は今の所見つからないが。
レコードセット「.xsd」の「UTF-8 BOM無し」はC#でもVBでも起きる問題をマイクロ
ソフトは不具合と考えているぽい。

で、ここから考えるにVSの動きとしては基本的にファイルを「UTF-8 BOM付き」で
保存する動きなので、そう言った面を気にするならって事で「3.」を追加した。

とりあえず動作する事が目的なら
>globalzationを消し去ったことでClass1.vbのShift-JISを自動認識して読み込んでくれているから
>だと思うのですが特にUTF-8 BOM付きに変換しなくともく正常に動作しました。
この理解で問題ないと思います。
02011952007/10/17(水) 01:45:19ID:???
>>200
なるほど。
なんで
>3.globalizationを削除して、「.xsd」と「Class1.vb」を「UTF-8 BOM付き」で保存する。
の選択肢がわざわざ用意されているのかと疑問に思っていました。
要約すると
・vbで「新しい項目の追加-クラス」で作成されたファイルのエンコードが既定が「Shift-JIS」であり
C#の場合は「UTF-8 BOM付き」であること
・今後の流れとしてはおそらく既定が「UTF-8 BOM付き」で保存する流れであることから
 「UTF-8 BOM付き」で保存するのも吉
ということですね。
現在わかっている不明な動作としては
・VBとC#で「新しい項目の追加-クラス」での保存形式が違う
・「.xsd」が「UTF-8 BOM無し」で保存される
であり、上の2つは不具合、もしくは不具合に近い動作であり、なぜかを追求する必要はなく、
とりあえず>>199の方法で対処だけしておけばよい。
ですね。
非常に参考になりました。
間違っている部分がありましたら指摘していただけるとありがたいです。
0202nobodyさん2007/10/17(水) 13:59:27ID:ZhgS5P3I
 検索エンジンの検索窓みたいに(キーワードの間に空白を入れてAND検索とか)という機能を持つ検索ボックスを使いたいんですけど、この場合、自前でキーワードを解析してSQL文を組みてる必要がありますか?
0203nobodyさん2007/10/17(水) 16:28:04ID:???
>>201
その認識で良いと思います。
マイクロソフトの正式な回答では無いのでどれを
選択するかは自由ですが。

>>202
結論から言えば自前だね。

そもそも、検索エンジンの空白でAND検索って形態素解析の
ほんの一概念でしかないのに「とか」と言われても。

とりあえず、空白でAND限定なら入力された文字列を
Split関数で配列化してForEachで回して各文字列の頭に「AND フィールド名=」
を付加してwhere作ればすぐ出来ると思う。
02041952007/10/18(木) 01:37:25ID:???
>>203
了解です、
細かな解説ありがとうございました。
0205nobodyさん2007/10/18(木) 21:03:24ID:???
ASP.NET2.0, VisualStadio2005,C# or VB.NETを使ってます。
GridViewでデータを表示し、編集ボタンクリック。
編集モードで更新ボタンクリックして更新中にエラーが発生したら
その趣旨メッセージとOKボタンのダイアログボックスを表示。
意外とサンプルが見つからず。どなたか教えてください。
0206nobodyさん2007/10/18(木) 22:25:05ID:???
サーバーサイドで動いてるのにダイアログボックスて。
JavaScriptとかでポーリングするつもりかい。
0207nobodyさん2007/10/18(木) 23:01:54ID:???
>>205
if (エラー時)
{
page.ClientScript.RegisterStartupScript(page.GetType(),"ErrorAlert", "alert('エラー');", true);
}
で処理を抜けて、画面に描写を行わせればJavascriptが動いてメッセージボックスが
表示される。

0208nobodyさん2007/10/19(金) 20:42:03ID:???
>207
ありがとう。
おかげさまで調べやすくなりました。
そのままでは動かなかったけど、次のように書いたらOKとなりました。

ScriptManager.RegisterStartupScript(Me.Page, Me.GetType(), "ErrorAlert", "window.alert('エラーだぴょん!');", True)

0209nobodyさん2007/10/19(金) 21:53:35ID:???
>>208
悪い。間違ってた。
C# ClientScript.RegisterStartupScript(this.GetType(), "ErrorAlert", "alert('エラー');", true);
VB ClientScript.RegisterStartupScript(Me.GetType(), "ErrorAlert", "alert('エラー');", True)
だったわ。

つうか、ScriptManagerってAjax利用してるのか?
ついでだから教えとくけど、ScriptManagerはAjaxのScriptManagerコントロール
がある時しか認識しないぞ。

動作的には簡単に言うと
ScriptManager.RegisterStartupScriptはajaxの非同期通信直後とページ描写時に
javascriptが吐き出される。
ClientScript.RegisterStartupScriptはページ描写時にjavascriptが吐き出される。
って感じだからタイミングによって使い分ける必要がある。
詳しくは自分で調べてみるといいよ。



Ajax非同期通信後に
0210nobodyさん2007/10/20(土) 16:11:30ID:bogh6jgR
スタンドアロン環境でAP開発して、ファイルコピーにて
アプリケーションを配置したのですが、初回起動時毎回
すごい時間がかかります。(=コンパイルされている様子)
どの点を見直せばよろしいでしょうか?
2003Server ASP.NET2.0
0211nobodyさん2007/10/20(土) 17:30:47ID:???
事前コンパイル
0212nobodyさん2007/10/20(土) 18:59:16ID:???
>>210
ASP.NET コンパイルの概要
http://msdn2.microsoft.com/ja-jp/library/ms178466(VS.80).aspx

自動コンパイル(動的コンパイル)
メリット:
 ソースをコピーすればいい。
 ソースを配布先でテキストエディタも修正できる。
デメリット:
 初めて要求時にコンパイルされる時間が掛かる。

埋め込み先コンパイル
メリット:
 ソースをコピーすればいい。
 ソースを配布先でテキストエディタも修正できる。
 初めて要求時にコンパイルされる時間が掛からない。
デメリット:
 ソースの一部でも修正したらコマンドラインで動的コンパイル時に発生するコンパイルと同じコンパイルを実行しなければならない。

事前コンパイル
(更新不可能な完全プリコンパイル・更新可能なプリコンパイル)
メリット:
 初めて要求時にコンパイルされる時間が掛からない。
 ソースを隠蔽する事が可能。
 全ての画面を単一のDLLにするなどが可能。
 更新可能なプリコンパイルなら、aspx、.ascxのみ変更可能。
デメリット:
 windowsアプリの様にソースと配布用の実行ファイルを分けて管理などを考える必要がある。

簡単な説明するとこんな感じ。
詳細は上のURLで理解したうえで、自分で選んでください。
0213nobodyさん2007/10/20(土) 19:51:27ID:???
しかし起動時にすごい処理してるってオチがあったりして…
0214nobodyさん2007/10/20(土) 21:46:20ID:bogh6jgR
>>212
参考になりました。ありがとうございます!!!
0215nobodyさん2007/10/20(土) 22:07:26ID:???
>>214
>211にも何か一言くらい...
0216nobodyさん2007/10/20(土) 22:10:10ID:jIqTRPXl
ASPはわからない部分が多いので教えてください。
こういうのを作っています。
・フレームで画面を上下に分割
・上部に検索条件を指定するための入力フォームと検索ボタン
・下部にObjectDataSourceとGridView
上部で指定された条件を元にSQLのWHERE文を作成し、下部に渡したいと思っています。
こういう時はどういう処理が一般的でしょうか?
今のところ考えているのが上部で作成したWHERE文をセッション変数に格納し、
下部のDataSourceのSelectedMethodで指定しているメソッドの中で
If セッション変数 <> String.Empty Then
  sql = sql & "WHERE" & Chr(13)
  〜ここで条件を追加〜
End If
みたいにして条件を追加しようと思っています。
これが動作するかどうかは試せばすぐわかると思うのですが
一般的な処理の方法がこんな感じで合っているか気になります。
いかがでしょうか?

0217nobodyさん2007/10/21(日) 01:32:40ID:???
フレームなんか使うな。
0218nobodyさん2007/10/21(日) 01:52:59ID:1pk3RmdZ
せっかくのPostbackなんだから単一画面でしょう
0219nobodyさん2007/10/21(日) 10:05:16ID:???
フレーム使わないでテーブルにぶち込むとか、<hr>で区切るとか汁!
02202162007/10/22(月) 00:25:54ID:???
>>217-219
とりあえず今回は上記の方法を採用しました。
動作としては今のところ問題ないようですのでこのままいきます。
ちなみになぜフレームを採用したかというと画面上部のフレームは
検索条件を指定する画面を表示するのですが
簡易検索条件入力フォームと詳細検索画面を切り替え、且つ、
下部は共通したGridViewを使用したかったためです。
ありがとうございました。
0221nobodyさん2007/10/22(月) 01:51:40ID:???
今回は仕方無いにしても,今度はフレームを利用せずに
それらを実現できるように成長することを期待。
02222162007/10/22(月) 03:32:30ID:???
>>221
ケースバイケースケースで
上部のフレームの中身を差し替えることで
検索条件の指定方法を変えたいと思いフレームを採用しましたが、
そこまでフレームを非推奨なのにはなにかわけがあったりしますか?
今回は切り替えと、常に上部に表示させておきたいということで
フレームを採用しましたがそこまで否定派が多いとちょっと気になります。
0223nobodyさん2007/10/22(月) 13:18:05ID:???
>>222
フレームについては宗教論争的な部分もあるんで他人から
強制させられるよりも自分で見つけたほうがいいよ。

とは言っても、あれなんで簡単に
・W3Cはframeに対して否定的な動き。
・1つのURIに1つの情報と言うのが理想的である。
・ユーザビリティ的にも、セキュリティ的にも低下する恐れがある。
ttp://java-house.jp/~takagi/paper/iw2002-jnsa-takagi-dist.pdf
・SEO関係の話
・完全ではないにしても(i)frameのメリットである「情報の部分再描画」はajaxで「スクロールによる表示箇所の分離」はcssで出来る。

とか色々、どれも否定する決定的な要因は無いのだが利用している側は大抵が「なんとなく」で使ってる場合が
多いので否定的な意見されるのが現実です。個人的には、上記のような事を理解した上で、デメリットを解決したり
無視できる状況を作り「フレームを使う」事によってしか生まれないメリットを追求する意思があるのならいいと思う。

上記は、HTML上の話だけだが更にASP.NETでフレーム開発になると以下が追加される。
ASP.NETのフレームワーク基本概念「postback」や「ViewState」は同一ページ内の処理を基本と
するため相性が悪い為、VS2003では選択できたフレームセットのテンプレートはVS2005では無くなりました。
VSから作れないだけでテキストエディタなどで作成することは可能ですが、別フレーム間の操作やデータ参照で
トラブルまたはASP.NETで作成する意味が無くなる場合があります。

ttp://karua.at.webry.info/200607/article_12.html
ttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=25167&forum=7&start=8&15

これを解決するにはHTML・CGIの知識とあわせてASP.NETの「イベント関係の理解」・「postbackやViewStateの内
部的な動き」「動的に作成されるJavascriptの理解」など通常フレームワークで隠蔽されている部分の知識が必要に
なる場合がほとんどです。
で、大抵ASP.NETでframeを使った際のトラブルなんて特殊な状況を想定できる人は少ないので、Webで質問しても
レスを貰う事も難しくなります。
0224nobodyさん2007/10/22(月) 13:43:34ID:???
>>214
追加だが
現在、「自動コンパイル」で遅いと思っていて手軽に解決するなら
「埋め込み先コンパイル」が一番簡単です。

cd /d C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
Aspnet_compiler -v /仮想ディレクトリ名 -errorstack

を2003Serverのコマンドプロンプトで流せば全てのファイルに
自動コンパイルを行った状態になります。
0225nobodyさん2007/10/22(月) 22:58:44ID:???
あとセッション使うと単純にやると各フレームで同時処理できないからそれも注意がいるかもよ。

0226nobodyさん2007/10/23(火) 00:43:07ID:???
>>225
どういう意味でしょうか?
02272162007/10/23(火) 01:51:24ID:???
>>223
なるほど。
>>W3Cはframeに対して否定的な動き
盲目的に信じるのもあれですがW3Cが推奨しないということは
やはりそれなりの理由があるんでしょうね。
>>VS2003では選択できたフレームセットのテンプレートはVS2005
2005でなくなっていてびっくりしました。
やはりVSとしても推奨しない動きなんでしょうね。
今回とりあえずフレームで実装したのですが変更した方がよいでしょうね。
だとしたら>>216>>220に内容は書きましたがフレームを使用することで
画面上部に検索条件入力フォームを「常に」表示させていたのですが
これをフレームを使用せずに用件を満たす必要があります。
フレーム無しで画面上部に常に表示させていたいコントロールを配置する場合
どうすればよいでしょうか?
常に表示させておく必要がなければvisibleあたりを制御するだけでよいのですが。。

>>225
これは>>226さんと同じく気になります。
どういう意味でしょうか?
02282162007/10/23(火) 02:32:53ID:???
すみません全く別の質問よいでしょうか?
検索結果一覧の画面を作成するためにどのコントロールを採用すればよいかお教えください。
目的は以下のサイトのようなビューです。
ttp://www.st-image.com/12/13/itemlist.aspx
・ページングあり
・単純な行での一覧表示ではなく、横→縦にデータが並んで表示される
試したこと
・GridView
 横に並んで表示できない
・DataList
 自前でページング処理を記述する必要があり
・DetailsView & FormView
 1レコードずつしか表示できない

一件DataListでもなんとかなると思うのですが自前で毎回全件を取得しないように気をつけたページング
処理を記述する必要があると言うところが腑に落ちません。
DataViewですとObjectDataSourceとObjectDataSourceのSelectedMethodを連携させることで
ページング処理を簡単に書くことができます。
なのにDataListでわざわざ自前でページング処理を書かなければならないというのが違和感です。
こういうサイトはどのようなコントロール&処理を実装しているのでしょうか?
0229nobodyさん2007/10/23(火) 11:13:34ID:???
>>227
まず、海外も含めてインターネット上で公開されているWebサービスで上部にボタンなどが固定されている
実例が少ないことを考えれば固定する必要がなくても使いやすいシステムはできると言うことを念頭に置くべきです。
「画面内に必要な情報を集める」とか「検索処理をした後に検索のテキストボックスが常に見えている必要があるのか?」とか

それでも固定することにメリットがあると思うのならCSSで[overflow:autoとかposition:fixed(IE6対応にはjavascriptが必要)]
ttp://msdn2.microsoft.com/ja-jp/library/default.aspx
(リキッドレイアウトにも対応)
は、数ある方法の無難な良い例になるので自分で解析してください。
Firefoxにfirebugアドオン入れれば解析も楽なはず。
もしくは、前のレスで言った「フレームを使う」事によってしか生まれないメリットを追求する。

各画面に同じレイアウト書かなきゃならんと言う開発側の問題はVS2005ならマスターページで解決する。

>>228
ObjectDataSourceを使ってる場合、GridViewだろうとページングの見た目は作成されるが処理は自前だけど。
SqlDataSourceなら処理部分まで自動で処理してくれるが、ボトルネックとか拡張性に問題があるので使い道はあまり無いが。

>処理を記述する必要があると言うところが腑に落ちません。
ASP.NETは魔法の杖じゃないから、普通にCGIで考えれば「必要な件数をDBから取得して」「必要な件数を表示する」と言うの
は当然でGridView+DataSourceはそれを処理しやすくなっているに過ぎないし。
だから、技術が無い・手軽になら既存のコントロールをベースにデザインを考えるしかない。
逆なら、クラスを継承するなり、カスタムコントロールなりで拡張すればいいだけ。
フレームワークの基本だと思うんだけどね。

1.ページング表示部を自作してDB検索してDataTableを作って「Repeater」コントロールで<div style="float:left;">を出力もしくは
DataListのDataSourceにDataTableを設定まで自分で作る。(中途半端にDataSourceなどの繋ぎに拘ると面倒になるので)
2.DataListを拡張(ユーザコントロール、カスタムコントロール)してDataSourceと連動するように作る。
 (ググればカスタムコントロールを作っている人も良そうだが)
0230nobodyさん2007/10/23(火) 11:57:47ID:???
Javascriptでaspを呼び出すことはできるのでしょうか。

Javascriptでクッキー処理 −引数つけてASP呼び出し→ ASP処理 → ASPでJS書き出し

という感じのことをやりたいのですが。
02312302007/10/23(火) 11:58:30ID:35vpnyji
age忘れましたすみません。
0232nobodyさん2007/10/23(火) 13:19:48ID:???
>>230
引数つけてASP呼び出し
location.href('http://www.aaa.aspx?a=1')
他は省略

>Javascriptでクッキー処理 −引数つけてASP呼び出し→ ASP処理 → ASPでJS書き出し
ってか、この各処理は同一のaspxでの話しを想定してるの?
クッキー処理はASPへのデータ引渡しの為に使うの?

つうか、ASP.NET以前に、「HTMLとCGI」の値の受け渡しに利用しようとしているんであれば
クライアントとサーバの切り分けが出来ていないように感じるんだがその辺は大丈夫?
そう感じた理由に「本来ならPostを基準にデータを取得する所をPostデータの管理を便利にする為
にCookieを利用している」と切り分けが出来てるなら、ASP.NETの基本概念を見ればどの様に変化
したかがわかると思うんだよね。
02332162007/10/24(水) 00:36:46ID:???
>>229
・フレームについて
回答ありがとうございます。
>検索処理をした後に検索のテキストボックスが常に見えている必要があるのか?
通信販売等のサイトで使い勝手を確認したところおっしゃるとおり「ない」です。
常に見えていないことが特に気になりませんでした。
急遽フレームを使う仕様を変更しました。
ご指摘ありがとうございました。

・ページング処理可能なビューについて
GridView+ObjectDataSourceがページング処理を記述しなくてもよいという表現は誤りでした。
おっしゃるとおりデータ取得部分は自前です。
GridView+ObjectDataSourceがページング処理の見た目の処理を備えていたので
他にもこういう機能がないのかと思ったのですが甘かったみたいです。
手軽に、というのも理由の一つですが堅実なものを作成したいので既に備えている機能をわざわざ
実装するのは避けたかったため質問させていただきました。
素直に自作します。
今回は「2.DataListを拡張〜」を行いたいと思います。
Webに関しては特にわからない部分が多いため質問のレベルも低いかもしれませんでしたが、
重ね重ねありがとうございます。
02342162007/10/24(水) 02:25:50ID:???
当初>>216にてお尋ねしましたが
フレームは使用しなくなったことで別フレームへ動的に作成されたWHERE区を
渡す必要はなくなりましたが、
以前と同じくWHERE区をObjectDataSourceのSelectedMethodで指定された
メソッドに渡す必要があります。
以前は別フレームに文字列渡すから仕方なくSession変数に複数の条件から作成した
WHERE区を入れておいて、ObjectDataSourceのSelectedMethodで指定された
メソッド内でFill()する前にSession変数から取り出せばよいと考えていたのですが、
同じページ内のコントロールからWHERE区を作成するだけなのにSession変数を
使用するのに違和感を感じてきました。
もっと簡潔な方法ありませんか?
・フレームは使用していない単一ページ
・検索ボタンは検索したい方法が2つあるため、ボタンが二つある
 (TextBox1つと検索ボタンで構成されたALLサーチ機能と細かい条件を指定するための多数の入力コントロールと詳細検索ボタン)
・SelectedMethod内でWHERE区を動的に作成しようとするなら、どちらのボタンが押されての検索かわからないため、
 SelectedParameterに全ての入力コントロールをずらずらと並べることはできない
 SelectedMethod内でどちらのボタンが押されての処理か判断できないと思われるため
・ボタンのイベントでそれぞれ動的にWHERE区を作成し、Session変数に格納し、
 SelectedMethod内で受け取るという処理はトリッキーな方法に感じる

本件はSession変数を用いてデータの受け渡しをすることが一般的な処理方法でしょうか?
勉強で作成していますので動けばいい、というものを作ることはできないため
確認させてください。
「ObjectDataSource SelectedMethod 動的 WHERE」辺りの検索ワードでは
 今回のケースにあたるような情報を見つけ出すことができませんでした。。
0235nobodyさん2007/10/24(水) 02:28:26ID:???
>>225
同一セッションのリクエストは直列化されるってことだよ。
0236nobodyさん2007/10/24(水) 03:00:01ID:???
フレーム分割することによりユーザービリティが低下することって考えられないけどねぇ・・・。
検索エリアを固定を常表示することで解決できるけど、それならFrameでいいじゃんと思んだけど・・・。
あらゆる場面を検証したW3Cに反論する気はないけど、規約に反するからって単一画面で描画の
遅いメニュー表示されたら余計にイライラするけどwww
0237nobodyさん2007/10/24(水) 12:38:49ID:???
>>234
1.SelectMethodに全ての条件+処理フラグの引数を作る。
2.SelectedParameterに項目+ボタン区別用のhiddenをControlParameterとする。
3.ボタンを押されたらASP側のクリックイベントでhiddenにフラグをセットする。
4.ObjectDataSourceの中身で処理フラグによって処理を分ける。

「2.」「3.」はSelectParametersをasp:Parameterにしておいて動的に変更すれば
hidden項目自体要らない。
0238nobodyさん2007/10/24(水) 16:35:10ID:???
質問者に対する回答でもなくて、
ユーザービリティを自分が経験した事だけでしか想像できなくて、
わけ分からん描画の遅い早いを持ち出す、
的外れてる奴が出てきたなと。
0239nobodyさん2007/10/24(水) 23:22:33ID:???
お前ら全員死ねよ
0240nobodyさん2007/10/24(水) 23:27:23ID:???
過激なやつだ…
0241nobodyさん2007/10/25(木) 21:16:47ID:???
お前ら全員愛してる
0242nobodyさん2007/10/25(木) 21:39:46ID:???
キスして
0243nobodyさん2007/10/26(金) 00:57:34ID:???
屁こいてやったぜ
0244nobodyさん2007/10/26(金) 15:36:23ID:???
MSDN2みたいに、メニューバーエリアを選択したら、そのメニュー項目が
Popupメニューのようにフェードイン・フェードアウトして一覧表示される
にはどうすればよいですか?
0245nobodyさん2007/10/26(金) 17:05:56ID:???
>>244
1.MSDNのjavascriptを解析して組み込む。
2.Popup Menuのjavascriptライブラリを利用する。
 ASP.NETの場合は、HTML上に表示されるコントロールID(ClientID)をライブラリに割り付ける方法は考える必要があり。
3.ASP.NET AJAX Control ToolkitのPopupControlExtenderを利用する。
 ASP.NETのほかのサーバコントロールと同じように作成できるが、
 Javascriptが隠蔽されるとか、コントロールの使い方を覚えないといかないはとかで理論が分かりにくい。

PopupControlExtenderの場合は<Animations>にこんな感じで指定すれば動く。
<Animations>
<OnShow>
<Sequence>
<StyleAction Attribute="overflow" Value="hidden"/>
<StyleAction Attribute="height" Value="0"/>
<StyleAction Attribute="width" Value="0"/>
<HideAction Visible="true" />
<Parallel Duration=".2" Fps="15">
<Resize Height="50" Width="125" Unit="px" />
</Parallel>
</Sequence>
</OnShow>
<OnHide>
<Sequence>
<StyleAction Attribute="overflow" Value="hidden"/>
<Parallel Duration=".2" Fps="20">
<Resize Height="0" Width="0" Unit="px" />
</Parallel>
<StyleAction Attribute="display" Value="none"/>
</Sequence>
</OnHide>
</Animations>
02462162007/10/27(土) 14:04:47ID:???
>>237
この方法で実装できそうです。
前から気になっていたのですっきりしました。
「asp:Parameter」という部分が理解できませんが別途調べますね。
ありがとうございます。
0247nobodyさん2007/10/27(土) 17:04:02ID:???
>>246
SelectedParameter
<asp:Parameter Name="flg" Type="String" />

ボタン1処理
ObjectDataSource.SelectParameters.Item("flg").DefaultValue = "処理1"

ボタン2処理
ObjectDataSource.SelectParameters.Item("flg").DefaultValue = "処理2"

とすれば、hiddenを経由しなくても動的に値を変化させられる。
hiddenの方がコントロールを経由するので直感的かもしれんが、
無駄なhiddenを作る必要が無かったりするので。
02482162007/10/28(日) 16:18:54ID:???
>>247
せっかくヒントをいただいたので自分で調べようと思っていたのですが
ご丁寧にありがとうございます。
<asp:Parameter>
というのはGUIで作成するところで言う
パラメータソースが「None」のものですね。
Noneてどういう時に使うのかと思っていました。
こちらを組み込んだところ無事動作が確認できました。
ありがとうございました。
0249nobodyさん2007/10/29(月) 00:16:00ID:???
ASP.NETの勉強サイト、またはTips集のサイトを教えてください!!!
0250nobodyさん2007/10/29(月) 00:54:42ID:???
>>249
Tips集というかサンプル集
ttp://www.friendlysw.com/knowhow/knowhow.asp
ここのASP.NETサンプル
とか。

勉強サイトについては聞き方として漠然としてよろしくないと思います。
ttp://www.google.co.jp/search?hl=ja&q=ASP+%E8%A7%A3%E8%AA%AC&lr=
0251nobodyさん2007/10/29(月) 01:47:16ID:???
>>249
ほとんど分からないのなら
一通りの機能には触るので>>2のMicrosoft ASP.NET
クイック スタート チュートリアルを最初の項目から順
にやっていくといいよ。

ただ、>>2のリンクはasp.net 1.1版なので2.0の場合は
web上では公開されて無いので「ASP.NET 2.0 クイック
スタートチュートリアル」をインストールしてみるといい。

最低限このクイック スタート チュートリアルの内容が
全て分かって無いとTips集なんか見ても理解できないかも。
0252nobodyさん2007/10/30(火) 12:03:08ID:???
>>250-251
ありがとう。
■ このスレッドは過去ログ倉庫に格納されています