1

MVC は初めてなので、用語が少しずれている場合はご容赦ください。

ASP.NET MVC3 ベータ版と VS 2010 を使用しています。

これが概念の誤りなのか、構文の誤りなのか、それとも何なのかはわかりません。

基本的に、私がやりたいことは、_layout.cshtml に対して、ActionResult が ViewModel.UseJQuery を true に設定するコントローラーの jQuery スクリプトを含めたいということです。

私は物事に慣れていないので、間違っている可能性がありますが、これを行うための最良の方法(私が現在試みていること)は次のようになります。

_layout.cshtml ファイル:

 @if(View.UseJQuery)
    {
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js">
        </script>
        <script type="text/javascript">
        $(document).ready(function() {
            // This is more like it! SHOULDN'T BE SEEN IF UseJQuery is false!
        });
        </script>
    }

さまざまなコントローラーで

  public ActionResult Index()
        {
            ViewModel.UseJQuery = false;
            ViewModel.Title = "Image Gallery";
            GalleryModel gm = new GalleryModel();
            ViewModel.Testy = gm.TestString;
            return View();
        }

ただし、これにより、null をブール値に変換する必要があるというエラーが表示されます (UseJQuery フラグが見つからないと思います)。

だから、私の質問は2つあります:

  1. これは正しい方法ですか?
  2. もしそうなら、構文的にどこが間違っているのでしょうか?

これはおそらく初心者の苦痛に過ぎないと確信していますが、最初は解決策を見つけることができませんでした (ASP.NET MVC の本を注文しています -- 約束します!)

助けてくれてありがとう!

編集/更新:

これは、MVC 2 と 3 の間で異なる可能性があるものですか? たとえば、すぐに使用できる HomeController.cs の Index() ActionResult は次のとおりです。

public ActionResult Index()
    {
        ViewModel.Message = "Welcome to ASP.NET MVC!";
        ViewModel.Title = "Home";

        return View();
    }

編集/更新: 問題が見つかりました!

ああ!変数が設定されているときにコードが機能することに気付きましたが、設定されていない変数を試してみました (もちろん、false ではなく null 値が渡されます)。

ここで問題になるのは、_layout.cshtml にどのようなロジックを配置すれば、null をキャプチャして代わりに false に設定できるようになるかということです。

私は次のようなことを考えています:

@if(View.UseJQuery.IsNull()){ @View.UseJQuery = false; }

ただし、これにはいくつかの問題があります。

  • IsNull() は正しい関数ですか、それとも構文が間違っていますか? (VS 2010 での Razor の構文サポートの欠如は私を殺しています、笑)
  • レイアウトで UseJQuery 変数をローカルに設定するにはどうすればよいですか? View.UseJQuery が機能するとは思えません。それはコントローラーが設定するものだからですよね?

いずれにせよ、上記の値を設定しようとしているエラーは「無効な式用語 '='」であるため、ViewModel 変数コレクションはビューに対して読み取り専用である可能性があると思いますか?

-- ショーン

4

3 に答える 3

1

モデルをビューに渡していないようです。オブジェクト_layout.cshtmlを期待する厳密に型指定されたビューとして設定されていますか?ViewModel

于 2010-10-20T23:13:57.530 に答える
1

通常、次のようなものが表示されると思います。

public ActionResult Index()
{
    GalleryModel gm = new GalleryModel();

    var model = new ViewModel {
        UseJQuery = false,
        Title = "Image Gallery",
        Testy = gm.TestString            
    };

    return View(model);
}

あなたのコードを見てViewModel、大文字の V を持つクラスまたはオブジェクトですか? View()いずれにせよ、重要なのはそれをメソッドに渡すことです。

ビュー ページでは、 type のモデルを想定して、厳密に型指定されたビューであることを指定する必要がありますViewModel

通常、あなたはから継承しますSystem.Web.Mvc.ViewPage<T>

于 2010-10-20T23:18:45.433 に答える
0

コントローラーで次を定義します。

ViewModel.UseJQuery

あなたのビューではまだ使用しています:

if(View.UseJQuery)
于 2010-10-22T12:50:11.637 に答える