2009-09-07 39 views
8

asp.net mvcを起動するときに教えていることは、これらの間違いを避けるために何かを強調していますか?asp.net mvc

+4

コミュニティのwikiに、別々のファイルにJavaScriptを入れて? – sshow

+2

誰かが覚えるべきことは、ウィキです! – Isaac

+0

推奨読書:ASP.netのパターンと反パターンについてのプレゼンテーションMVC:http://indomitablehef.com/?p=225 –

答えて

8
  • 使用Html.Encodeから離れて自分の意見に

  • 避けロジックを入力しますどこにでもデータを印刷します。そうしないと良い理由がない限り、XSSについて心配する必要はありません

  • ご意見もしくはJavaScriptにルートをハードコードしないでください - 彼らはいくつかの点で変更するつもりだ、Url.Actionを(使用)の代わりに
  • は、MVCは何の銀ではありません
  • 部分図を使用することを恐れてはいけませんそれが実際にあなたの問題を解決するのに最適なツールであるかどうかを最初に評価してください。
4

パターンの「ユニットテスト」の部分を忘れないでください。コントローラの

0

は結合Formsコレクション、使用モデルを使用しないでください。

ViewDataを使用しないでください。ViewModelを作成してください。

ビューにループまたはifがある場合は、HTMLヘルパーを作成します。

優しさ、

ダン

3

常にコントローラとビューの間でデータを渡すためのViewModelを使用してみてください。 モデルを渡すことはできますが、突然、モデルを編集するためのいくつかのオプションを備えたリストボックスが必要です。メッセージを表示すると(検証メッセージではない)、アイテムをViewDataは、魔法の文字列をキーにして、アプリのメンテナンスを難しくしています。 ViewModelで解決するセキュリティ上の問題もあります。例えば :

class user: 
int id 
string name 
string email 
string username 
string password 

あなたのビューせ、ユーザが

public ActionResult Edit(User user) 
{ 
--persist data 
} 

誰かがあなたのフォームを改ざんして、新しいパスワードとユーザー名を投稿することができ、アクションに彼の名前と電子メールや投稿を変更だとあなたがする必要があります。 DefaultBinderの動作には非常に注意してください。あなたのようなビューモデルを使用している場合 は今、:

class userEditViewModel: 
int id 
string name 
string email 

問題がなくなっています。

+0

アクションのフィルタで 'username'と 'password'を除外しないのはなぜですか? 更新するフィールドのリストだけでモデルを更新しますか? – twk

+0

これは完全に有効ですが、そうすることを忘れることがあります。新しい開発者の中にはこれが分かっていない人もいるかもしれません。 ViewModelsを使用すると、ほとんど失敗することはありません。 –

+0

@twkアクションフィルタはユニットテストが難しいです。 – bzlm

1
  • ことが可能であるときはいつでも)(あなたのビューが

  • のHttpContext

0

にNET MVCフレームワーク

  • デバッグコントローラが脂肪1になり、あまりにも多くの仕事をさせてはいけません。私は過去に1000 +ラインコントローラを見てきましたが、何が起こっているのかを理解するのは絶対的な悪夢になります。

    コントローラのユニットテストを利用して、依存関係が制御され、コードがテスト可能であることを確認します。

    jQueryとfancyクライアントスクリプトは、アプリケーションの動作を定義してはいけません。できるだけ慎重に使用し、アプリケーションを強化するようにしてください。

    可能な限り部分ビューとHTMLヘルパーを使用すると、ビューが扱いにくくなり、メンテナンスの悪夢となることがありません。

    可能であればViewModelを使用してください。

    依存関係注入フレームワークを使用して依存関係を処理します(MvcContribには複数のコントローラファクトリがありますが、自分でロールするには十分シンプルです)。

  • 0

    のViewDataを使用する方法を学ぶ(例えば、ホーム、アカウント)

    サイトの各セクションの別のコントローラを使用し、TempDataを

    れるrenderPartial

    1
    • の使用があなたの場合は何を学ぶには単一のパラメータメソッドのidから異なるパラメータ名を持つコントローラメソッドを作成します。新しいルートを作成する必要があります。ちょうど弾を噛んで、id(タイプについては気にしません)を使用してコメントに説明してください。
    • あなたはRedirectToActionとあなたのパラメータに名前を付けることを確認します:

      return RedirectToAction("DonateToCharity", new { id = 1000 });

    • You lose your ViewData when you RedirectToAction

    1

    はないビューページ

    +0

    なぜですか?ビューページでjs変数を割り当てる必要がある場合はどうすればよいですか?現在のアイテムのID、または生成されたURL私は大部分のjavascript(関数)が* .jsファイルに含まれていることに同意しますが、多くの変数、ローカライズされたメッセージなど、cshtml/ascxの中で、 –