C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.79394 の関連記事表示

<< 0 >>
■79394  C# MVC UpdateModelメソッドについて
□投稿者/ vespha -(2016/03/30(Wed) 05:58:08)

    分類:[ASP.NET (C#)] 

    以下の環境にてUpdateModelメソッドについて質問をさせていただきます。
    開発環境:VS2012 C# MVC3 .NetFrameWrok4 EF4.1

    Controllerクラスでは普通にUpdateModelメソッドを使用できるのですが、別クラスにて使用したく
    以下のように記述しました。
    コントロールクラス
    [HttpPost]
    public ActionResult Edit()
    {
    //別クラスのメソッドを呼び出す
      xxxx(this);
    }

    別クラスのメソッド
    public void xxxx(Controller ctr)
    {

    ctr.UpdateModel();←認識されない
    }


    別クラスに引数でthisでコントロールを渡し、UpdateModelを使用しようとしたのですが、
    認識されない。
    まだ、始めたばかりで理解度が低く検討違いなコードかもしれません。
    ただ、したいことはコントロールクラスでなく、別のクラスにてUpdateModelメソッドを利用するにはどうすればよいかと
    いうことです。
    お知恵を拝借したく、よろしくお願い致します。
親記事 /過去ログ135より / 関連記事表示
削除チェック/

■79398  Re[1]: C# MVC UpdateModelメソッドについて
□投稿者/ WebSurfer -(2016/03/30(Wed) 10:54:26)
    No79394 (vespha さん) に返信

    > したいことはコントロールクラスでなく、別のクラスにてUpdateModelメソッド
    > を利用するにはどうすればよいかということです。

    UpdateModel メソッドのアクセス修飾子は protected internal となっていると思
    いますが、その「別のクラス」はアクセス可能な範囲に入っているのでしょうか?


    #質問する際は局所的な部分だけでなく全体的なシナリオ、やりたいことを書くのが
     いいと思います。そうしてもらえると、その局所的なところはできないけどやりた
     いことはこうすればできるとか、それよりこの方がスマートにできるなど代案が出
     てくるかもしれませんので。
記事No.79394 のレス /過去ログ135より / 関連記事表示
削除チェック/

■79401  Re[2]: C# MVC UpdateModelメソッドについて
□投稿者/ フィール -(2016/03/30(Wed) 15:58:09)
    UpdateModelメソッドのスコープはprotectedなので、そのクラス内でしかアクセスできません。
    継承クラスであれば、継承元のprotectedメンバへのアクセスも可能ですが、
    サンプルソースから推測するに、別クラスからコントロールクラスのこのメソッドを呼ぶことはできません。

    なぜ別クラスから任意コントロールのUpdateModelを行いたいのでしょうか?
記事No.79394 のレス /過去ログ135より / 関連記事表示
削除チェック/

■79405  Re[3]: C# MVC UpdateModelメソッドについて
□投稿者/ vespha -(2016/03/31(Thu) 02:44:32)
    No79401 (フィール さん) に返信
    > UpdateModelメソッドのスコープはprotectedなので、そのクラス内でしかアクセスできません。
    > 継承クラスであれば、継承元のprotectedメンバへのアクセスも可能ですが、
    > サンプルソースから推測するに、別クラスからコントロールクラスのこのメソッドを呼ぶことはできません。
    >
    > なぜ別クラスから任意コントロールのUpdateModelを行いたいのでしょうか?

    返信ありがとございます。
    別のクラスからUpdateModelを使いたかったのはDBへの更新などの処理をコントロールクラスではなく別のクラス(ビジネスロジック)で
    完了させたいと思ったからです。UpdateModelに引き続きSaveChangesメソッドにてDBに確定する処理もコントロールクラスで行うのに
    違和感があり、別クラスにて使用できないかと思ったためです。
    ただ、protectedメンバということで別のクラスに継承させるのは、それはそれでちょつと違うとも思います。
    やはり、コントロールクラスでさせるべきなのですかね。 その辺のクラスへの処理の切り分けはどうしているのでしょうか。
    再度のご質問となり恐縮ですが、どのように切り分けるのが良いか再度のアドバイスをいただければ。。。
    漠然とした質問でもうしわけありません。
記事No.79394 のレス /過去ログ135より / 関連記事表示
削除チェック/

■79486  Re[4]: C# MVC UpdateModelメソッドについて
□投稿者/ WebSurfer -(2016/04/07(Thu) 15:33:39)
    No79405 (vespha さん) に返信
    
    自分の関わったスレッドがこのまま放置で終わってしまっては何なので一言・・・
    
    > その辺のクラスへの処理の切り分けはどうしているのでしょうか。
    
    スキャフォールディング機能を使って作る時のように分ければいいと思います。
    
    ちなみに、Visual Studio 2010 を使って、AdventureWorksLT サンプルデータベースから 
    DB First で EDM を作り、それをベースにスキャフォールディング機能を利用してコント
    ローラーとビューを自動生成させると、質問者さんのコードに該当する Edit アクション
    メソッドは以下のようになります。
    
    モデル(ビジネスロジック)のクラスの初期化、POST されてきたパラメータの引渡し、
    DB を更新するためのメソッドの起動はコントローラーのアクションメソッドで行なわれ
    ています。
    
    それら別のクラスに移す意味はなさそうです。というより、開発工数や保守性を考えたら、
    そんなことはすべきでないと思います。
    
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.Entity;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using AdventureWorksLT;
    
    namespace Mvc4App.Controllers
    {
        public class Address2Controller : Controller
        {
            private AdventureWorksLT_DataEntities db = new AdventureWorksLT_DataEntities();
    
            // ・・・中略・・・
    
            [HttpPost]
            public ActionResult Edit(Address address)
            {
                if (ModelState.IsValid)
                {
                    db.Address.Attach(address);
                    db.ObjectStateManager.ChangeObjectState(address, EntityState.Modified);
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }
                return View(address);
            }
    
            // ・・・中略・・・
        }
    }
    
    
    ちなみに、
    
    db.Address.Attach(address);
    db.ObjectStateManager.ChangeObjectState(address, EntityState.Modified);
    db.SaveChanges();
    
    は、
    
    var address = (from a in db.Address
                   where a.AddressID == id
                   select a).FirstOrDefault<Address>();
    UpdateModel<Address>(address);
    db.SaveChanges();
    
    と同じ結果になります。
記事No.79394 のレス /過去ログ135より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -