タグ付けされた質問 「asp.net-mvc」

ASP.NET MVCフレームワークは、モデルビューコントローラー(MVC)パターンを実装するMicrosoft Webアプリケーションフレームワークです。

2
最高のオープンソースASP.NET MVC eコマースプロジェクト[終了]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 eコマースサイトを立ち上げて運用する必要がありますが、必要のない場合はボトムアップでプログラムしたくありません。ASP.NET MVCを使用してプログラムしたい。 ベースとして使用し、必要な機能を強化できる、優れたオープンソースの代替案(またはモジュール式の場合は購入用の代替案)を探していますか? すべての「通常の」eコマース機能を備えている必要があり、選択したクレジットカードAPIと統合する可能性も必要です。 誰かが私にここで私に何か提案があれば、私はそれを感謝します:)

5
Web APIを使用した純粋なフロントエンドJavaScriptとajaxを使用したMVCビュー
これは、最近のWebアプリケーションの分割方法に関する人々の考えについての議論でした。 私は、すべてのビューとコントローラーを備えたMVCアプリケーションの作成に慣れています。通常、完全なビューを作成し、すぐにデータを入力したくない特定の領域がなければ、DOMページ読み込みイベントを使用してサーバーを呼び出して他の領域を読み込む場合を除き、フルページリクエストでこれをブラウザに返します。 AJAXを使用します。 また、ページの部分的な更新については、MVCアクションメソッドを呼び出して、HTMLフラグメントを返します。このメソッドを使用して、ページの一部にデータを入力できます。これは、最初のページの読み込みを遅くしたくないエリアや、AJAX呼び出しに適したエリアに適しています。1つの例は、テーブルページングです。次のページに進みたい場合は、ページ全体の更新を使用するのではなく、AJAX呼び出しがその情報を取得した方がよいでしょう。ただし、AJAX呼び出しはHTMLフラグメントを返します。 私の質問は。私は純粋なフロントエンドの背景ではなく、.netの背景から来ているので、この古風なものに対する私の考えはありますか? 私が一緒に仕事をしているインテリジェントなフロントエンド開発者は、MVCビューで多かれ少なかれ何もしないことを好み、むしろフロントエンドですべてを行います。すぐにWeb API呼び出しがページに入力されます。そのため、HTMLを返すMVCアクションメソッドを呼び出すのではなく、標準オブジェクトを返し、javascriptを使用してページのすべての要素を作成することを好みます。 フロントエンドの開発者の方法は、クライアント側の検証を含む、MVCモデルの検証で通常得られるメリットがなくなることを意味します。また、強く型付けされたhtmlテンプレートなどを使用してビューを作成することで得られる利点がすべてなくなることも意味します。 これは、フロントエンドとバックエンドの検証で同じ検証を記述する必要があることを意味すると考えています。JavaScriptには、DOMのすべての異なる部分を作成するための多くのメソッドも必要です。たとえば、テーブルに新しい行を追加する場合、通常、MVC部分ビューを使用して行を作成し、これをAJAX呼び出しの一部として返します。これはテーブルに挿入されます。純粋なフロントエンドの方法を使用すると、javascriptはAPI呼び出しから行のオブジェクト(たとえば製品)を取得し、そのオブジェクトから行を作成します。テーブル行の個々の部分を作成します。 問題のWebサイトには、管理、フォーム、製品検索など、さまざまな分野があります。私が考えていないWebサイトは、単一ページのアプリケーション方法で設計する必要はありません。 これについての皆の考えは何ですか? フロントエンドの開発者とバックエンドの開発者の意見を聞きたいです。

4
この方法でこのコードを書いているのはテスト可能ですが、見落としているコードに何か問題がありますか?
というインターフェイスがありますIContext。この目的のために、以下を除いて、実際に何をするかは重要ではありません。 T GetService<T>(); このメソッドが行うことは、アプリケーションの現在のDIコンテナを調べ、依存関係を解決しようとすることです。かなり標準だと思います。 ASP.NET MVCアプリケーションでは、コンストラクターは次のようになります。 protected MyControllerBase(IContext ctx) { TheContext = ctx; SomeService = ctx.GetService<ISomeService>(); AnotherService = ctx.GetService<IAnotherService>(); } そのため、各サービスのコンストラクターに複数のパラメーターを追加するのではなく(アプリケーションを拡張する開発者にとってこれは非常に面倒で時間がかかるため)、このメソッドを使用してサービスを取得しています。 今、それは間違っていると感じています。しかし、私が現在頭の中でそれを正当化している方法はこれです- 私はそれをあざけることができます。 できます。IContextControllerをテストするためにモックアップすることは難しくありません。とにかくする必要があります: public class MyMockContext : IContext { public T GetService<T>() { if (typeof(T) == typeof(ISomeService)) { // return another mock, or concrete etc etc } // etc …

2
「プレゼンテーションロジック」とは何ですか。
私のWebアプリケーションでは、作成および編集用のフォームを提供する必要があります。作成用と編集用のフォームにはわずかな違いがあるので、私の見解ではこのようなことを考えています。 <form> // a lot of htnl goes here @if (editing) { // some more fields shown in edit mode } @if(!editing) { // some stuff shown in create mode } 私はいつもif自分のビューにステートメントを入れないようにしましたが、今回はHTMLの大部分を2つの場所にコピーする以外のオプションは表示しません。これは適切な「プレゼンテーションロジック」であり、他のオプションはありますか?

5
JSONおよびEntityを使用した循環参照の問題を回避する方法
データモデル/データベースのプレゼンテーションレイヤーとエンティティフレームワークにJSONを使用したMVCを活用するWebサイトの作成を実験しています。私の問題は、ModelオブジェクトをJSONにシリアル化することに関係しています。 私は自分のデータベースを作成するためにコードファーストの方法を使用しています。コードファーストの方法を実行するとき、1対多の関係(親/子)では、子が親への参照を持つ必要があります。(サンプルコードはタイプミスかもしれませんが、写真を取得します) class parent { public List<child> Children{get;set;} public int Id{get;set;} } class child { public int ParentId{get;set;} [ForeignKey("ParentId")] public parent MyParent{get;set;} public string name{get;set;} } JsonResultを介して「親」オブジェクトを返す場合、「子」にはクラス親のプロパティがあるため、循環参照エラーがスローされます。 ScriptIgnore属性を試しましたが、子オブジェクトを見ることができません。ある時点で、親子ビューに情報を表示する必要があります。 循環参照を持たない親と子の両方の基本クラスを作成しようとしました。残念ながら、baseParentとbaseChildを送信しようとすると、これらは派生クラスとしてJSONパーサーによって読み取られます(この概念が私を逃れていると確信しています)。 Base.baseParent basep = (Base.baseParent)parent; return Json(basep, JsonRequestBehavior.AllowGet); 私が思いついた1つの解決策は、「ビュー」モデルを作成することです。親クラスへの参照を含まないシンプルなバージョンのデータベースモデルを作成します。これらのビューモデルにはそれぞれ、データベースバージョンを返すメソッドと、データベースモデルをパラメーターとして取得するコンストラクターがあります(viewmodel.name = databasemodel.name)。この方法は機能しますが、強制されているようです。 注:ここで投稿しているのは、これがより議論に値すると思うからです。別のデザインパターンを活用してこの問題を克服することも、モデルで別の属性を使用するのと同じくらい簡単にすることもできます。私の検索では、この問題を克服する良い方法を見ていません。 私の最終目標は、サーバーと通信してデータを表示するためにJSONを大幅に活用する素晴らしいMVCアプリケーションを持つことです。レイヤー全体で一貫したモデルを維持しながら(または、私が思いつく限り)。

4
モデルに「FullName」や「FormattedPhoneNumber」などのゲッターを配置するのは「パターン臭」ですか?
私はASP.NET MVCアプリに取り組んでおり、便利で便利なゲッターをモデル/エンティティクラスに入れる習慣を身につけています。 例えば: public class Member { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string PhoneNumber { get; set; } public string FullName { get { return FirstName + " " + LastName; } } …

3
IValidatableObjectと単一の責任
ビューモデルでIValidatableObjectを実装し、カスタム検証を追加できるようにするMVCの拡張ポイントが気に入っています。 このコードを唯一の検証ロジックにして、コントローラーを無駄のないものにしようとしています。 if (!ModelState.IsValid) return View(loginViewModel); たとえば、ログインビューモデルはIValidatableObjectを実装し、コンストラクターインジェクションを介してILoginValidatorオブジェクトを取得します。 public interface ILoginValidator { bool UserExists(string email); bool IsLoginValid(string userName, string password); } ビューモデルにインスタンスを注入するNinjectは、実際には一般的な慣行ではないようです。 これは良いアプローチですか?より良いものはありますか?

3
現在のページネーション実装の設計に関する質問
asp.net mvcのページネーションの実装を具体的に確認しましたが、実装にはあまり効率的でないものがあると本当に感じています。 すべての実装の最初に、以下のようなページネーション値を使用します。 public ActionResult MostPopulars(int pageIndex,int pageSize) { } 私が間違っていると感じることは、pageIndexとpageSizeが完全にPaginationクラスのメンバーでなければならないことです。そうでなければ、この方法は非常に機能的な方法に見えます。また、アプリケーションの階層で不要なパラメーターパスを簡素化します。 2番目は、以下のインターフェイスを使用することです。 public interface IPagedList<T> : IList<T> { int PageCount { get; } int TotalItemCount { get; } int PageIndex { get; } int PageNumber { get; } int PageSize { get; } bool HasPreviousPage { get; } bool HasNextPage …

5
ASP.Net MVCからASP.Net Webformsに戻ります。パターン/アーキテクチャを推奨しますか?
多くの人にとって、これはばかげた質問のように聞こえますが、ASP.Net Webformsの経験がほとんどないため、私は尋ねています。ASP.NetMVCに直行しました。 現在、.Net 2.0とVisual Studio 2005に限定されたプロジェクトに取り組んでいます。 ASP.Net MVCを使用する際の懸念の明確な分離が好きで、Webフォームを耐え難くするものを探しています。asp.net MVCを好むが、.net 2.0とvisual studio 2005にこだわっている人に推奨されるパターンやプラクティスはありますか?

1
ASP.NET MVCの非同期コントローラー:真の利点/達成方法
私はASP.NET MVCの非同期コントローラーメソッドに関する記事(http://visualstudiomagazine.com/articles/2013/07/23/async-actions-in-aspnet-mvc-4.aspx)を通して取り組んできました。ポイントが足りないかもしれません。 私が書いたこの方法を考えてみましょう。これは、記事の例に非常によく似ています。 [HttpGet] [AsyncTimeout(8000)] [HandleError(ExceptionType = typeof(TimeoutException), View = "TimedOut")] public async Task<ActionResult> Index(CancellationToken cancellationToken) { WidgetPageViewModel model = new WidgetPageViewModel() { toAdd = new Widget() }; model.all = await _repo.GetAllAsync(cancellationToken); return View(model); } 私は物事を理解しているので、これは物事が実行時に展開する方法です: 着信HTTP要求に対してASP.NETスレッドが作成されます。 このスレッドは(おそらく何らかの必要な準備作業を行った上で)上記のIndex()メソッドに入ります。 実行は「await」キーワードに到達し、別のスレッドでデータ取得プロセスを開始します。 元の「ASP.NET」スレッドは、戻り値としてTaskクラスのインスタンスを使用して、ハンドラーメソッドを呼び出したコードに戻ります。 ハンドラーメソッドを呼び出したインフラストラクチャコードは、実際のActionResultオブジェクトを使用する必要があるポイントに到達するまで(ページのレンダリングなど)、元の "ASP.NET"スレッドで動作し続けます。 次に、呼び出し元はTask.Resultメンバーを使用してこのオブジェクトにアクセスします。これにより、上記の手順3で暗黙的に作成されたスレッドを待機します(つまり、「ASP.NET」スレッド)。 私が些細なことだと思う2つのことを除いて、await / asyncなしで同じことと比較してこれが何を達成するのか見ていません: 呼び出し側スレッドとawaitによって作成されたワーカースレッドは、一定の期間(上記の#5の「まで」)並行して動作できます。私の考えでは、その期間はかなり短いです。インフラストラクチャがコントローラーメソッドを呼び出す場合、それが(もしあれば)さらに多くのことができるようになる前に、通常はコントローラー呼び出しの実際のActionResultが必要だと考えています。 長時間実行される非同期コントローラー操作のタイムアウトとキャンセルに関連するいくつかの有用な新しいインフラストラクチャがあります。 非同期コントローラーメソッドを追加する目的は、ASP.NETワーカースレッドを解放して、実際にHTTP要求に応答することです。これらのスレッドは有限のリソースです。残念ながら、記事で提案されているパターンが実際にこれらのスレッドを節約するのにどのように役立つかはわかりません。そして、それが何らかの形でリクエストを処理する負担を何らかの非ASP.NETスレッドにオフロードしても、それは何を達成しますか?たまたまHTTP要求を処理できるスレッドは、一般のスレッドとは大きく異なりますか?

1
ASP.NET IdentityUserを他のエンティティから分離する
私が持っているProjectName.Coreすべての私のビジネスロジックと私のエンティティとその行動を含むライブラリを。現在、Entity Frameworkやその他のDALとはまったく関係がありません。これらのことを分離しておくのが好きだからです。Entity Framework構成(Fluent APIを使用)はProjectName.Infrastructureプロジェクトに常駐するため、エンティティをEFにプッシュできます。基本的には、オニオンのようなアーキテクチャの方向に向かっています。 ただし、ASP.NET Identityフレームワークをミックスに追加する場合、ApplicationUserエンティティをIdentityUserクラスから継承する必要がありますが、ApplicationUserクラスには他のエンティティとの関係があります。継承するIdentityUser際に、エンティティプロジェクトにエンティティフレームワークへの参照を導入しています。これは、そうしたくない1つの場所です。(Entity FrameworkベースのIDシステムを使用しているため)ApplicationUserエンティティプロジェクトからプロジェクトにクラスをプルするとInfrastructure、循環参照が発生するため、どちらにすることもできません。 これを回避する方法はありますか?ASP.NET Identityを使用しないことに加えて、2つの層の間のきれいな分離を保つことができますか?

2
ASP.NET MVCでは、ビューモデルにIDが必要ですか?
モデルを更新できるASP.NET MVCアプリケーションを開発する場合、更新されたビューモデルを取得し、現在更新されているモデルに戻す方法を知る方法が必要です。これを行うにはいくつかの異なる方法があるようで、これらのいずれかが適切なMVCではないのではないかと思っています(モデルにあるはずのデータをコントローラーに保存させるのは適切なMVCではありません)? すべてのビューモデルにはIDがあります:長所 モデルと一致できることを常に確認してください。 短所 IDが変更されないように注意する必要があります。それ以外の場合は、ユーザーにアクセスを許可しない行を更新させることができます。 最低限のビューモデルのみにIDがあります:長所 ユーザーがアクセスしてはならないデータを更新しないようにするために必要なチェックがはるかに少なくなります。 短所 どのビューモデルがどのモデルと一致するかを追跡するのははるかに困難です。 ユーザーがアクセスできないデータを更新していないことを確認するには、IDを持ついくつかのビューモデルを確認する必要があります。 IDを持つビューモデルはありません: 長所 更新のIDを確認する必要はありません。 短所 あなたは無国籍を放棄しなければなりません。 そこで、2つの質問があります。 まず、正しい/間違った選択肢がありますか?(そうでない場合、選択は意見の問題であり、私の2番目の質問は意見に基づいているため、無視する必要があります。) 第二に、正しい/間違った選択がある場合、それはどれですか? コメントを明確にするために、データベースオブジェクトを模倣したビューモデルがある場合に話しています。 これを考えてください: public class InvoiceViewModel //Does not have ID, does not relate to model. { public CustomerViewModel CustomerVM { get; set; } //Maybe has ID? Does relate to model. public AddressViewModel …
11 mvc  asp.net-mvc 

1
MVC + 3層; ViewModelsが登場する場所
ASP.NET MVC 4を使用して3層アプリケーションを設計しています。次のリソースを参照として使用しました。 CodeProject:MVC + N層+エンティティフレームワーク ASP.NET MVCでのデータアクセスの分離 これまでに次のようなデザインがあります。 プレゼンテーション層(PL) (メインMVCプロジェクト、MのMVCは、データアクセス層に移動されました): MyProjectName.Main Views/ Controllers/ ... ビジネスロジックレイヤー(BLL): MyProjectName.BLL ViewModels/ ProjectServices/ ... データアクセス層(DAL): MyProjectName.DAL Models/ Repositories.EF/ Repositories.Dapper/ ... 現在、PLはBLLを参照し、BLLはDALを参照しています。このように、下層は上の層に依存しません。 この設計では、PLはBLLのサービスを呼び出します。PLはビューモデルをBLLに渡すことができ、BLLはビューモデルをPLに戻すことができます。 また、BLLはDALレイヤーを呼び出し、DALレイヤーはモデルをBLLに戻すことができます。BLLは、ビューモデルを作成してPLに返すことができます。 今まで、このパターンは私のために働いていました。ただし、ViewModelsのいくつかがいくつかのエンティティで結合する必要があるという問題に遭遇しました。プレーンMVCアプローチでは、コントローラーでjoinsを実行してからを実行するためにLINQクエリを使用しましたselect new MyViewModel(){ ... }。しかし今、DALでは、ViewModelが定義されている場所(BLL内)にアクセスできません。 これは、DALで参加してBLLに戻すことができないことを意味します。(1つのクエリでの結合の代わりに)DALで個別のクエリを実行する必要があり、BLLはこれらの結果を使用してViewModelを構築します。これは非常に不便ですが、DALをViewModelに公開する必要はないと思います。 このジレンマを解決する方法はありますか?ありがとう。

4
オープンソースプロジェクトは、その設計やアーキテクチャに関するドキュメントなしで成功するにはどうすればよいですか?
有名なオープンソースプロジェクトを勉強してプログラミングスキルを向上させたいのですが、ソースコードに飛び込むだけで簡単に迷子になります。 そこで、最初にコードの構成に関する一般的なアイデアを得るために、設計またはアーキテクチャ(UMLダイアグラムなど)に関するドキュメントを読むことにしました。しかし、驚いたことに、Hibernate、Spring、ASP.NET MVC、Railsなどの大規模なオープンソースプロジェクトのアーキテクチャドキュメントは見つかりませんでした。 だから私は疑問に思い始めました:新しい開発者が読むべきアーキテクチャ/設計ドキュメントがない場合、またはプロジェクトマネージャーがソースコードを開いただけでドキュメントを閉じた場合、オープンソースプロジェクトはどのように成功するのでしょうか?

4
単体テストの使用方法
前に何度も質問がありましたが、特定の傾斜twds mvc開発がありました。 私は非常にいい子で、対応する単体テストですべてのコントローラーアクションをコーディングしてきました。正直に言うと、私は実際に初期のユニットテストのほとんどの骨を書くために小さなT4テンプレートを作成し、使用法に応じて適切に調整しました。パーシャルビューを含むビューでテストを処理する方法がよくわからないことは認めますが、それは別の質問の話です。 今、私が判断するのが難しい部分は、サービスレイヤーでカバレッジをどれだけ深くするかです。その理由は、私のサービスメソッドのいくつかは(良くも悪くも)実際にさまざまなlinqクエリを実行し、メソッド内の後続のロジックに個別の情報を提供するためです。私はこれらのメソッドを分解して、各linqステートメントに必要なロジックのみを呼び出し、メソッド内でそれらを適用できることを知っています。ただし、多くの場合、linqの「関数」の再利用は一切行われないため、これによりコードのレベルが過度にリファクタリングされると考えられます。 私が求めているのは、メソッド内で複雑なロジックが発生している場合、必要な結果および/または予想されるエラーを単にアサートするテストメソッドがあるか、すべてのロジックラインもシミュレートしてテストする必要があるということです。私が見ている方法、テストを正しく行うために、メソッドロジック(行ごと)も何らかの種類のカバレッジを取得する必要があります。しかし、それは(私の素朴な意見では)テストと実装されたメソッドをテスト自体にコテージ業界を作成するように密接に整列させようとする(私は彼らがそうであるべきだと知っています)ことを試みる終わりのないサイクルにつながる可能性があります。 私の質問は、これを簡単なこととは思わないTDD信者の一部を怒らせるかもしれません。TDDキャンプにいないので、これは私にとって「はい」ので、問題です。 ところで-アイデアのためにこれをチェックアウトしていました: http://dotnetslackers.com/articles/aspnet/Built-in-Unit-Test-for-ASP-NET-MVC-3-in-Visual-Studio-2010-Part-1.aspx 今着実にdownvotesにfwdを探しています:) [編集] -シングルの利益のために(今のところシングル!!)「近い」投票者。この質問は主観的なものではありません。私は非常に焦点を絞った主題に関するコンセンサスを探しています。私は否定的な情熱をかき立てようとはしていません。テクノロジーの欠陥を公開しようとは思っていません。私は大ファンです。したがって、曖昧さや誤報がある場合に質問を再構築するのに役立つ可能性があるため、閉会に投票する場合、私の利益のために丁寧なコメントをドロップしてください。この質問は、mvc人口の大部分に利益をもたらす可能性があります。 ありがとうございました!! ジム
11 c#  .net  asp.net-mvc 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.