<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ハセテツラボ &#187; ASP.NET</title>
	<atom:link href="http://tt-house.com/category/asp-net/feed" rel="self" type="application/rss+xml" />
	<link>http://tt-house.com</link>
	<description>生涯一開発屋</description>
	<lastBuildDate>Wed, 08 Sep 2010 23:42:04 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>サーバサイドのexeを実行する</title>
		<link>http://tt-house.com/2006/04/exe.html</link>
		<comments>http://tt-house.com/2006/04/exe.html#comments</comments>
		<pubDate>Sat, 08 Apr 2006 15:05:31 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[ASP.NET]]></category>

		<guid isPermaLink="false">http://www.tt-house.com//wp/?p=17</guid>
		<description><![CDATA[時間のかかる重たい処理なんかはサーバサイドに用意しておいたexeを非同期でつつい...]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftt-house.com%252F2006%252F04%252Fexe.html%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22%E3%82%B5%E3%83%BC%E3%83%90%E3%82%B5%E3%82%A4%E3%83%89%E3%81%AEexe%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%22%20%7D);"></div>
<p>時間のかかる重たい処理なんかはサーバサイドに用意しておいたexeを非同期でつついたほうがいい場合があります。当然ながらクライアントサイドのexeはつつけませんが、メールの大量送信（スパムではありません）なんかをするときには結構重宝します。 </p>
<p></p>
<blockquote><p>//非同期でexeつつく <br />
System.Diagnostics.Process.Start(&#8220;C:&yen;&yen;hoge&yen;&yen;hoge.exe&#8221;); </p>
<p>//同期でexeつつく <br />
System.Diagnostics.Process prExe = System.Diagnostics.Process.Start(&#8220;C:&yen;&yen;hoge&yen;&yen;hoge.exe&#8221;); <br />
prExe.WaitForExit();  </p></blockquote>
<p>
上のサンプルコードは非同期です。つまり、つついた後は放置です。つつき逃げみたいな感じです。<br />
でも、多分上のサンプルのほうが現実的なような気がします（今回の用途では、という意味で）。 </p>
<p>下のサンプルは同期しますが、exeのプロセスが消えるまで「待つだけ」です。ほとんどフリーズと同じです。 </p>
</p>
<blockquote><p>//非同期でexeつついて、exeの実行が終了したらイベント起こす<br />
System.Diagnostics.Process prExe = System.Diagnostics.Process.Start(&#8220;C:&yen;&yen;hoge&yen;&yen;hoge.exe&#8221;);<br />
prExe.EnableRaisingEvents = true;<br />
prExe.Exited += new EventHandler(prExe_Exited);</p>
<p>private void prExe_Exited(object sender, EventArgs e)<br />
&#123;<br />
//終了したらこのメソッドが呼ばれます<br />
&#125;</p></blockquote>
<p>
 </p>
<p>
このサンプルだと、非同期でexeつついておいて、プロセスが終了したら「終わったよ」というイベントあげてくれます。WEBアプリの場合、サーバからクライアントにイベント通知はできないけど、「処理が終わりました」メールくらいは送れそうです。<br />
まぁ、Windowsアプリ向けの手法でしょうね。</p>

]]></content:encoded>
			<wfw:commentRss>http://tt-house.com/2006/04/exe.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NETでクライアントサイドにランタイムでJavaScriptを書き出す方法</title>
		<link>http://tt-house.com/2006/02/aspnetjavascript.html</link>
		<comments>http://tt-house.com/2006/02/aspnetjavascript.html#comments</comments>
		<pubDate>Tue, 07 Feb 2006 11:28:35 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[ASP.NET]]></category>

		<guid isPermaLink="false">http://www.tt-house.com//wp/?p=13</guid>
		<description><![CDATA[クライアントサイドにランタイムでJavaScriptを書き出す方法です。別に「R...]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftt-house.com%252F2006%252F02%252Faspnetjavascript.html%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22ASP.NET%E3%81%A7%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%82%B5%E3%82%A4%E3%83%89%E3%81%AB%E3%83%A9%E3%83%B3%E3%82%BF%E3%82%A4%E3%83%A0%E3%81%A7JavaScript%E3%82%92%E6%9B%B8%E3%81%8D%E5%87%BA%E3%81%99%E6%96%B9%E6%B3%95%22%20%7D);"></div>
<p>クライアントサイドにランタイムでJavaScriptを書き出す方法です。別に「Response.Write」で書き出してもいいのですが、こっちのほうがスマートのような気がします。 </p>
<p></p>
<blockquote><p>//クライアントサイドにアラートを出す <br />
RegisterClientScriptBlock(&#8220;client&#8221;, &#8220;&lt;script language=&#8217;JavaScript&#8217;&gt; alert(&#8216;RegisterClientScriptBlock&#8217;) &lt;/script&gt;&#8221;); </p>
<p>RegisterStartupScript(&#8220;client&#8221;, &#8220;&lt;script language=&#8217;JavaScript&#8217;&gt; alert(&#8216;RegisterStartupScript&#8217;) &lt;/script&gt;&#8221;);  </p></blockquote>
<p>
「RegisterClientScriptBlock」で書き出すと、Formの開始タグの直後に出力されます。 <br />
「RegisterStartupScript」の場合はFormの終了タグの直前です。 </p>
<p>書き出すタイミングが違うということは、クライアントサイドで実行されるタイミングも違う為、使い分けると色々と便利です。 <br />
サンプルではalertしか出してませんが、メソッドをaspxページに用意しておき必要なときにコールする等、用途は色々です。</p>

]]></content:encoded>
			<wfw:commentRss>http://tt-house.com/2006/02/aspnetjavascript.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSVファイルをダウンロードさせる方法</title>
		<link>http://tt-house.com/2006/02/csv.html</link>
		<comments>http://tt-house.com/2006/02/csv.html#comments</comments>
		<pubDate>Fri, 03 Feb 2006 14:33:52 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[ASP.NET]]></category>

		<guid isPermaLink="false">http://www.tt-house.com//wp/?p=11</guid>
		<description><![CDATA[System.IO.MemoryStream ms = new System.I...]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftt-house.com%252F2006%252F02%252Fcsv.html%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22CSV%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E3%81%95%E3%81%9B%E3%82%8B%E6%96%B9%E6%B3%95%22%20%7D);"></div>
<blockquote><p>System.IO.MemoryStream ms = new System.IO.MemoryStream(System.Text.Encoding.GetEncoding(&#8220;Shift-JIS&#8221;).GetBytes(strBuffer));</p>
<p>Response.AddHeader(&#8220;Content-Disposition&#8221;,&#8221;attachment;filename=total.csv&#8221;);<br />
Response.ContentType = &#8220;application/octet-stream&#8221;;<br />
Response.BinaryWrite(ms.ToArray());<br />
Response.End();</p></blockquote>
<p>
MemoryStreamが、実際のデータです。<br />
「strBuffer（string型）」にダウンロードさせるCSVデータを突っ込んでおいて、それをMemoryStreamに乗せて吐き出すといったイメージですね。</p>
<p>別にサーバサイドでファイル生成して、それをダウンロードさせてもいいのですが、こっちの方がファイルIOもなく、ゴミも残らないのでスマートかと思われます。</p>

]]></content:encoded>
			<wfw:commentRss>http://tt-house.com/2006/02/csv.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NETでJavaScriptのconfirmを表示し、処理を分岐させる方法</title>
		<link>http://tt-house.com/2006/02/aspnetjavascriptconfirm.html</link>
		<comments>http://tt-house.com/2006/02/aspnetjavascriptconfirm.html#comments</comments>
		<pubDate>Wed, 01 Feb 2006 16:08:27 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[ASP.NET]]></category>

		<guid isPermaLink="false">http://www.tt-house.com//wp/?p=10</guid>
		<description><![CDATA[ポストバックでイベントを起こすASP.NETの場合、JavaScriptでcon...]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Ftt-house.com%252F2006%252F02%252Faspnetjavascriptconfirm.html%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22ASP.NET%E3%81%A7JavaScript%E3%81%AEconfirm%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%97%E3%80%81%E5%87%A6%E7%90%86%E3%82%92%E5%88%86%E5%B2%90%E3%81%95%E3%81%9B%E3%82%8B%E6%96%B9%E6%B3%95%22%20%7D);"></div>
<p>ポストバックでイベントを起こすASP.NETの場合、JavaScriptでconfirmを出して「確認」→「分岐」という流れを作る場合はどうしたらよいだろうと悩んで、調べてみました。 </p>
<blockquote><p>//Page_Loadで属性の追加をする<br />
public void Page_Load(object sender, EventArgs e)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;Button1.Attributes["onclick"]=&#8221;return confirm(&#8216;クリックしたの？&#8217;);&#8221;;<br />
}</p>
<p>//confirmでtrueが返ってきたらこのイベントが呼ばれる<br />
private void Button1_Click(object sender, System.EventArgs e)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;RegisterStartupScript(&#8220;client&#8221;, &#8220;&lt; script language=&#8217;JavaScript&#8217;&gt;  alert(&#8216;クリックされちゃった&#8217;) &lt; /script&gt; &#8220;);<br />
}</p></blockquote>
</p>
<p>
かなり割愛してますが、必要なコードはこんな程度です。<br />
Page_LoadでButton1というコントロールに属性を追加しておくだけです。あとは勝手に分岐処理を記述してくれます。 </p>
<p>aspx側のボタンコントロールにonclickを直接記述したらエラーが出てしまいました。まぁ、onclickはポストバックイベントが動的に記述されるので、当然といえば当然の結果か。<br />
もっとスマートなやり方もありそうだけど、とりあえずこんな感じで。</p>

]]></content:encoded>
			<wfw:commentRss>http://tt-house.com/2006/02/aspnetjavascriptconfirm.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
