マンガでよめる痔のこと・薬のこと

お世話になります。
asp.netオフィシャルサイト上のデモを見て、asp.net mvcを使って、アプリを作りたいんですが、DBにテーブルが複数ある場合、複数のテーブルからデータを抽出し、viewに表示する方法が分からなくて困ってます。
ご存知の方いらっしゃらましたら教えてください。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

次が参考になるかもしれません。



ASP.NET MVC入門 @IT
http://www.atmarkit.co.jp/fdotnet/aspnetmvc/inde …

その中のこの回
http://www.atmarkit.co.jp/fdotnet/aspnetmvc/aspn …

そして、複数テーブルからEntity Data Modelを作成するには
http://www.atmarkit.co.jp/fdotnet/special/vs2008 …

これらを見ていけば出来ると思います。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q【ASP.NET MVC】一覧編集画面

いつもお世話になります。
ASP.NET MVCを使って構築中のサイトで、また暗礁に乗り上げております。

商品一覧の画面で、一覧表示のままCRUD(追加・更新・削除)するインターフェースを客先から求められております。
一覧表示 → 個別画面でのCRUDはできていますが、画面遷移が面倒ということで却下されました。
ASP.NETでいう、GridViewのようなテイストです。
(各行にテキストボックス・更新ボタン・削除ボタン)

モデルはこんな感じです(簡略化してあります。実際にはご教示いただいたカスタム検証もあります)
public class Lady
{
 public int ID { get; set; }
 public string name { get; set; }
 public int areaID { get; set; }
 public int salesAmount { get; set; }
}
public List<Lady> ladies;

一覧表部分のビューはこんな感じです(細かい点は省略です)

@foreach (var lady in Model.ladies){
 @using(Html.BeginForm("UpdateLady","Admin")) {
  @Html.Hidden("ID", lady.ID)
  @Html.TextBox("name", lady.name)
  @Html.DropDownList("areaID", new SelectList(model.areas, "areaID","areaName", lady.areaID))
  @Html.TextBox("salesAmount",lady.salesAmount)
  <!-- 以降不明 -->
  <input type="submit" value="更新"/>
  <input type="submit" value="削除"/>
 }
}

コントローラ

class AdminController
{
 public EditLady(){
  var model = new EditLadyView();
  return View("EditLady", model);
 }

 [HttpPost]
 public UpdateLady(Lady lady){
  if (ModelState.IsValid){
   // 更新
   // lady.IDをキーにしてDBを更新
  } else {
   // 再表示 <!-- ここがわからない -->
  }
 }

 [HttpPost]
 public DeleteLady(int ID){
  // 削除
  // IDをキーにしてDBを削除
 }

}


質問点は以下の通りです。

■表示はOKですが、できたhtmlを見ると、各行の項目が同じid / name名になります。これで正しいですか?
■同じForm内に更新ボタンが複数あった場合、formのPOST先を変える必要がありますが、javascriptを使うのでしょうか?
■検証失敗時、全体を再表示するにはどういった方法があるでしょうか? 読み直すと入力した値が消えてしまいます。

会社にMVCの経験者がおらず、苦労しています。
なにとぞお助けください。

いつもお世話になります。
ASP.NET MVCを使って構築中のサイトで、また暗礁に乗り上げております。

商品一覧の画面で、一覧表示のままCRUD(追加・更新・削除)するインターフェースを客先から求められております。
一覧表示 → 個別画面でのCRUDはできていますが、画面遷移が面倒ということで却下されました。
ASP.NETでいう、GridViewのようなテイストです。
(各行にテキストボックス・更新ボタン・削除ボタン)

モデルはこんな感じです(簡略化してあります。実際にはご教示いただいたカスタム検証もあります...続きを読む

Aベストアンサー

こんにちは。
一覧で表示し、更新は一行単位というのは、GridViewやListViewではよくやる処理です。
項目数が少なく行数が限定的な場合を除き、全体一括更新は使ってはいけません!

要点だけ述べます。
ご謙遜されていますが、MVCの内容ををお分かりのようなので、自分で解決策を考えてください。

1 こんな風にレンダリングされるフォームを作ります。
<input type="hiddden" name="ID" value="1012" />
<input type="text" name="1012.name" value="東京花子" />
<input type="text" name="1012.address" value="千代田区一丁目一番地" />

2 更新メソッドで、いきなりLady型のladyで受けず、IDだけを取得します。
3 取得したIDを接頭辞(prefix)として、表示に使ったビューモデルの指定ID行を、TryUpdateModelで更新します。
4 ModelStateは、TryUpdateModelでも有効です。
5 DB更新はただUpdateすればいいだけ
6 検証失敗時のリトライは、更新できなかったビューモデルをそのまま返します。

ASP.NET MVC3関連の洋書には、こういうTable CRUDの話題が良く出ています。
英語読まなあかんのですが。。苦(笑

こんにちは。
一覧で表示し、更新は一行単位というのは、GridViewやListViewではよくやる処理です。
項目数が少なく行数が限定的な場合を除き、全体一括更新は使ってはいけません!

要点だけ述べます。
ご謙遜されていますが、MVCの内容ををお分かりのようなので、自分で解決策を考えてください。

1 こんな風にレンダリングされるフォームを作ります。
<input type="hiddden" name="ID" value="1012" />
<input type="text" name="1012.name" value="東京花子" />
<input type="text" name="1012.address" val...続きを読む

QASP.NET MVCでObjectをjsに渡す

いつも勉強させてもらっております。
ASP.NET MVC3で、ビューに渡すモデルを用意するのですが、最近javascriptをよく使うので、一発で展開できるようにできないかと思っています。

現在は、いったん起動後、jQueryで、Ajax JSONで取得しています。こちらだとすぐjavascriptのオブジェクトが取得できるので。

javascriptで一発展開というのは例えば、
public class HogeClass
{
 public string moge { get; set; }
 public List<string> fugas { get; set; }
}
があって、ビューモデルとして
public ActionResult HogeAction(){
 var hogeObj = new HogeClass();
 return View("hoge", hogeObj);
}
のようにビューへ渡して、

ビューの"hoge.cshtml"内部で、
<script type="text/javascript">
 var hogeObj = <%=Model %>; // こんなので通るわけないですよね
</script>
とかできたらいいなあ、という話です。

いちいち起動のたびにAjaxで読み直すのは速度のこともあるし、気になります。
これまでは全部サーバでやってたのでこんなこと考えなかったんですが、皆さんはどうされてます?

いつも勉強させてもらっております。
ASP.NET MVC3で、ビューに渡すモデルを用意するのですが、最近javascriptをよく使うので、一発で展開できるようにできないかと思っています。

現在は、いったん起動後、jQueryで、Ajax JSONで取得しています。こちらだとすぐjavascriptのオブジェクトが取得できるので。

javascriptで一発展開というのは例えば、
public class HogeClass
{
 public string moge { get; set; }
 public List<string> fugas { get; set; }
}
があって、ビューモデルとして
public ActionResu...続きを読む

Aベストアンサー

AjaxでJSON渡しをやっているんだから、同じこと(シリアライズ)をやればいいんだよ。

<script type="text/javascript">
@{
 var serializer = new JavaScriptSerializer();
 var value = serializer.Serialize(Model);
}
var hogeObj = @value;
</script>

JSONに渡せる程度のオブジェクトだったら、これでいけると思う。

QC#にてDropDownListの値を動的に設定する

C#にてDropDownListの値を動的に設定したいのですが、要約すると以下の感じです。
DBより読込んだ値が「A」の場合
Items Text   Value
0 あああ  アアア
1   いいい  イイイ

DBより読込んだ値が「B」の場合
Items Text   Value
0 かかか  カカカ
1   ききき  キキキ
2   くくく  ククク

としたいのですが、どのように設定してよいか初心者のため、
分かりません。恐れ入りますが、有識者の方、ご教示下さい。

Aベストアンサー

DorpDownListに設定するデータはどこにあるのでしょう
DataSetやDataSourceにあるのか まったく関係ない配列にあるデータなのか

DBから来たデータというのはいつ取得されるものなのか ・・・

TextやValueに設定するデータがDB側にあるなら
仕様を満たす SQLを構築してDataSourceオブジェクトを作成し
DropDownListのDataSourceIDやDispaleyTextFieldおよびDataValueFieldを適切な設定をすればいいように思います

QASP.NET:複数結合テーブルのデータ変更方法について

ASP.NET:複数結合テーブルのデータ変更方法について
こんにちは。
現在Visual Studio2008(ASP.NET、ADO.NET) +SQL Server2005 Stdの環境でデータベースを参照したWebアプリケーションを作成しています。

GridViewを使い、データベースの内容を表示し、修正や追加、削除を行いたいと思っています。
(SQLのUpdate,Insert,Deleteに該当)

主キーが設定された単独のテーブルに対しては、GridView内のデータソースでデータベースを選び、
該当のテーブルを選択。その後「INSERT,UPDATEおよびDELETEステートメントの作成」オプションを選ぶことでこれらの変更方法が簡単に実装できるのを確認しております。

しかし、主キー外部キーの関係を持つ2つ以上のテーブルを結合したものに関してこれらの変更を行う場合は通常どのようにするのでしょうか。
何かヒントになるキーワードや参考になるコードを教えていただけないでしょうか?

単独のテーブルの時と同じく、結合したテーブルデータ(ビューに該当)をGridViewに表示し、そのGridView上で変更を行いたいと思っています。

SQL Server側でこれらのテーブルを結合したViewを作成し、これを選ぶことでGridViewに表示する事が可能なのは確認したのですが、やはり「INSERT,UPDATEおよびDELETEステートメントの作成」オプションは選択できませんでした。


以上よろしくお願いいたします。

ASP.NET:複数結合テーブルのデータ変更方法について
こんにちは。
現在Visual Studio2008(ASP.NET、ADO.NET) +SQL Server2005 Stdの環境でデータベースを参照したWebアプリケーションを作成しています。

GridViewを使い、データベースの内容を表示し、修正や追加、削除を行いたいと思っています。
(SQLのUpdate,Insert,Deleteに該当)

主キーが設定された単独のテーブルに対しては、GridView内のデータソースでデータベースを選び、
該当のテーブルを選択。その後「INSERT,UPDATEおよびDELETEステートメント...続きを読む

Aベストアンサー

正規化データベースの結合テーブルを簡単・安全に一括更新することは、我々システムエンジニアにとって永遠のテーマであり、運用ニーズやパフォーマンスの点でさまざまな妥協にもとづき、わざと冗長化するなど、現実解に則って実装することが多いです。
ただ最近、Microsoftは、コンセプト、ツールの両面でこの問題に真正面から取り組んでおり、めざましく進歩しています。

一般的に、ASP.NETでデータベースアクセスするには、いくつかの方法があります。
原始的な(古い)方法から順に述べますと、
・DataConnection/DataCommandによるアクセス(SQL直書き)
・DataAdapter/DataSourceによるアクセス
・TableAdapter/DataTableによるアクセス
・SQLDataSourceによるアクセス
・ObjectDataSourceによるアクセス
・LINQ for SQLによるアクセス
・Entituy Frameworkによるアクセス
・その他、サードパーティー製品による複合的なアクセス
です。また、これ以外には別解として、ストアドプロシージャを定義し、各スキームから呼び出す方法もあります。
このうち、ご希望の「正規化されたデータベース」へ、結合テーブルのまま、SQLを書かずに更新するスキームは、最後の3つです。

おそらくご使用になっているスキームは、GridViewと同時期に発表されたSQLDataSourceだと思われますが、これは簡略なDBハンドリングをSQLレスで実現するために考えられたもので、結合テーブル更新は難しいです(デザイナの更新メソッドを全部オーバーライドすればもちろん可能ですが、それなら最初からSQLDataSOurceなど使わないでしょう)
ObjectDataSource以前のスキームなら順次、個別更新するしかありません。

LINQ以降であれば、結合エンティティのまま正規化されたDBを更新できます。
ComponentOneなど、サードパーティ製の市販グリッドは、内部でデータアクセスモジュールを自動生成するので、LINQを使わなくても一括更新は可能です。

ただ現実の仕事では、それ以外の要素として悲観同時処理や長時間ロック、トランザクションなどが複雑になることがあるので、全部ストアドプロシージャに持ち込んでしまいます。

簡単な社内システムや、僅少アクセスの閲覧中心なWebシステムでしたら、LINQ for SQLでいけると思います。
いずれにせよ、SQLDataSourceなど使っていては拡張性も乏しく、先は見えています。

参考URL:http://chicasharp.net/scottgu/result2.aspx?target=LINQ+to+SQL+%28%E3%83%91%E3%83%BC%E3%83%88+1+-+LINQ+to+SQL%E3%82%92%E4

正規化データベースの結合テーブルを簡単・安全に一括更新することは、我々システムエンジニアにとって永遠のテーマであり、運用ニーズやパフォーマンスの点でさまざまな妥協にもとづき、わざと冗長化するなど、現実解に則って実装することが多いです。
ただ最近、Microsoftは、コンセプト、ツールの両面でこの問題に真正面から取り組んでおり、めざましく進歩しています。

一般的に、ASP.NETでデータベースアクセスするには、いくつかの方法があります。
原始的な(古い)方法から順に述べますと、
・DataConnec...続きを読む

QASP.net MVC4のデータ更新について

お世話になっております。

MVC4でWEBプログラミング作成しながら勉強しています。
チュートリアル等で簡単なデータベースの更新は出来るようになりました。

各データ操作で1レコード1ページで作る方法はなんとなく分かりました。

例えば、Viewでデータの一覧を表示し、表示分の複数データを一括でControllerに
送る方法がまったくわかりません。
ネットで結構調べましたがなかなか分からなくて。。
List等でControllerに送る事が出来たら一括で更新できるかなと思っていますが。。

基本的な事でしょうがご教授お願いします。

Aベストアンサー

実例はここいらに
http://www.binaryintellect.net/articles/b1e0b153-47f4-4b29-8583-958aa22d9284.aspx

要は、
<input type="text" name="customers[0].CustomerID" />
<input type="text" name="customers[0].CustomerName" />
<input type="text" name="customers[1].CustomerID" />
<input type="text" name="customers[1].CustomerName" />
<input type="text" name="customers[2].CustomerID" />
<input type="text" name="customers[2].CustomerName" />

のようなフォームを作って、
public class Customer
{
public int CustomerID { get; set; }
public string CustomerName { get; set; }
}
なクラスで受けるバインディングを行えばいい、ということです。

Controllerはこんな感じ。
public ActionResult UpdateCustmers(List<Customer> customers){
// 別にパラメタで指定するなり、UpdateModel使うなり
}

ですね。

実例はここいらに
http://www.binaryintellect.net/articles/b1e0b153-47f4-4b29-8583-958aa22d9284.aspx

要は、
<input type="text" name="customers[0].CustomerID" />
<input type="text" name="customers[0].CustomerName" />
<input type="text" name="customers[1].CustomerID" />
<input type="text" name="customers[1].CustomerName" />
<input type="text" name="customers[2].CustomerID" />
<input type="text" name="customers[2].CustomerName" />

のようなフォームを作って、
public class Custo...続きを読む

Q[ASP.NET]DropDownListのDB連携のやり方。

こんにちわ。
VS.NET2003で、ASP.NET+C#で開発しております。
ちょっと悩んでしまったので、質問させてください。

とある入力フォームを作成しようと思っているのですが、そのフォームにDBと連携したDropDownListを複数配置させたいと考えております。
で、とりあえず1つ連携させてみたのですが、これを複数やるのってなんだかなぁ。っと思ってしまいました。

連携の方法としては、
(1)sqlDataAdapterを作成、クエリを作る。
(2)sqlDataAdapterからdataSetオブジェクトを作成する。
(3)Page_LoadメソッドにてsqlDataAdapter.Fill(dataSetオブジェクト)を実行し、DataBindする

なんですが、これDropDownListの数だけsqlDataAdapter作らなくちゃいけないんですかねぇ?途中で端折れるところや、使いまわし出来る部分がありましたら、どなたか教えてください。

よろしくお願いします。

Aベストアンサー

VS.NETでVisualにやる方法でやる方法がありますが、
これは初心者向けです。
コードを自分で書いた方が効率がよい。

例えば、データテーブルの読み込みメソッドを共通クラスに置く。

public DataTable ReadDataTable(string strSQL)
{
DataTable dt = new DataTable();
OleDbDataAdapter da = new OleDbDataAdapter();
da.SelectCommand = new OleDbCommand(strSQL, 接続);
da.Fill(dt);
return dt;
}

Page_Loadでは

DropDownList1.DataSorce = 共通クラス.ReadDataTable("select * from TableHoge");
DropDownList1.DataBind();

QASP.NETでのメッセージ画面を出すには

はじめまして。
ASP.NET(C#)で、開発をしています。
例えば、内部である処理が終わった後に「完了!」みたいなメッセージ画面をポップアップさせたいと思っております。いろいろ調べてはいるんですが、方法がわかりません。JSを使わなければならないのかなとは思いますが、具体的な方法がわかりません。
よい方法がありましたら、教えていただけないでしょうか。よろしくお願いいたします。

Aベストアンサー

確認は取れていませんが、多分以下のHPの内容でいけると思いますが…。
参考に如何でしょうか。

・ASP.NETでメッセージボックス(OK・NO)の処理について
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=5952&forum=7&6

・Webアプリでメッセージボックスを使いたい
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=1644&forum=7&7

QMAX値を条件にデータを取得するには?

SQL文で困っています。
ご教授下さい。


下記のようなデータがあった場合、それぞれの区分毎に
年月が最大(最新)のデータを取得したいです。
(実際には1レコードにその他項目があり、それらも取得します。)
<検索対象データ>
区分 年月   金額
-----------------------------
A   200412  600
A   200503  560
B   200311  600
B   200508  1000
B   200504  560
C   200508  400
C   200301  1100


<取得したいデータ>

区分 年月   金額
-----------------------------
A   200503  560
B   200508  1000
C   200508  400

よろしくお願いします。

Aベストアンサー

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが)

select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A
inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月
order by B.区分

Q【ASP.NET MVC】更新アクション

いつもお世話になっております。
ASP.NET MVCのコントローラで、フォーム送信を受けて動作する更新アクションの作り方について質問させてください。
いろいろな記事やチュートリアルを読んで、なんとか次のような基本計については理解できました。

public class HomeController
{

[HttpPost]
public ActionResult UpdateItem(Item item){

 if (! ModelState.IsValid){
  TempData["error"] = "入力内容にエラーがあります";
  return View("ItemEdit", item);
 } else {
  var result = false;
  //
  // 延々と更新メソッドが続く
  //
  if (result) {
    TempData["message"] = "正しく更新できました"
    ModelState.Clear();
    return Redirect("ItemList");
  } else {
    TempData["error"] = "更新でエラーが起きました";
    return View("ItemEdit", item);
  }
 }

}

}

TempData["xxx"]の処理は、ビュー側で、値に応じてjQueryUIによりダイアログを表示します。

質問したい箇所は以下の3つです。

■一体、全体の流れはこれでいいのでしょうか? if文とTempDataばっかりで。。何かスッキリしません。
■フォーム値の検証はアクション呼び出しの時点で終わっていますが、ここに任意の検証を入れたい場合はどうしたらいいのでしょう?
(必須や文字種チェックはモデルで属性設定を行っていますが、それ以外の例えば2項目が連動するような検証)
■サンプルの例文は簡単ですが、DB更新などが伴うと数百行になるため、すごく見通しが悪いです。全部別メソッドにするのも。。いい方法はないでしょうか

不明点だらけですんません(笑
どなたか愛の手を

いつもお世話になっております。
ASP.NET MVCのコントローラで、フォーム送信を受けて動作する更新アクションの作り方について質問させてください。
いろいろな記事やチュートリアルを読んで、なんとか次のような基本計については理解できました。

public class HomeController
{

[HttpPost]
public ActionResult UpdateItem(Item item){

 if (! ModelState.IsValid){
  TempData["error"] = "入力内容にエラーがあります";
  return View("ItemEdit", item);
 } else {
  var result = false;
  //
...続きを読む

Aベストアンサー

こんにちは

■全体の流れ
検証NG、検証OK->更新OK、検証OK->更新NGと、きちんと処理が書かれているので、よくまとまっていると思います。
onosさんはViewBagでメッセージを返すように仰っていますがRedirectのように画面が遷移して、遷移後にメッセージを表示しなければいけない場合には、TempDataのほうが便利です(nayutaxさんのコードで気づきました^^; これ賢いやり方ですね)

■フォーム値の検証
モデルバインディングまで踏込むと大事になるので(笑、ここはカスタム検証を定義すればいいと思います。記述的にもすっきりするし。

http://cs.gogo-asp.net/blogs/naoki/archive/2010/07/02/ASP.NET-MVC-2-_6730AB30B930BF30E0305E5C27606E305C4F106268300130AF30E930A430A230F330C830B530A430C9301C693C8A6E30DD30A430F330C830_.aspx

文献はMVC2ですが、そのまま動きます。
ASP.NET MVC3だと、確かクライアント検証が大幅に拡張されているはずですがそこまで調べてない(^^;

■コントローラメソッドの拡張
ここはやはり、IoCでしょう。
単体テストもできるようになるし、堅牢になるし、捗りますよ。

http://david9142.wordpress.com/2012/07/13/asp-net-mvc%E3%81%AE%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9%E3%82%92%E8%80%83%E3%81%88%E3%81%A6%E3%81%BF%E3%81%9F1/

ですかね。

こんにちは

■全体の流れ
検証NG、検証OK->更新OK、検証OK->更新NGと、きちんと処理が書かれているので、よくまとまっていると思います。
onosさんはViewBagでメッセージを返すように仰っていますがRedirectのように画面が遷移して、遷移後にメッセージを表示しなければいけない場合には、TempDataのほうが便利です(nayutaxさんのコードで気づきました^^; これ賢いやり方ですね)

■フォーム値の検証
モデルバインディングまで踏込むと大事になるので(笑、ここはカスタム検証を定義すればいいと思います。記述的...続きを読む

QASPで画面間のパラメタ受け渡し

こんばんは。ASP初心者です。
ASPでWEBページの作成を行っています。画面遷移をResponse.Redirect()で行っているのですが、遷移前のページと遷移後のページでパラメタを受け渡したい場合はSession("hoge") = "hogehoge"のようにセッションに入れる以外、何か方法はないでしょうか。リクエスト間でパラメタ渡せればがいいので、セッションを通じて保持しておく必要がないのです。クエリを使用するとアドレス欄に変数の値が見えてしまうのでできれば使いたくありません。

Aベストアンサー

1. Cookieを使う
2. 画面遷移を postで行い、hidden項目に値をセットする (要JavaScript)

私は面倒なのでセッション変数使ってますが、必要なくなればセッションをクリアすれば良いだけだと思います。

Session.Contents("hoge") = Empty


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング