0

asp.net MVC 4 と razor 構文を使用しています。カスタムモデルがあります。これを想像してください:

namespace MyProject.SampleModel
{
    public class MyCustomModel
    {
        public bool MyBoolean1 { get; set; }
        public bool MyBoolean2 { get; set; }
    }
}

ビューから、ヘッダーで、次のことを行います。

@model MyProject.SampleModel.MyCustomModel

(...)
@Html.CheckBoxFor(m => m.MyBoolean1 ) <---- ERROR HERE: MyBoolean1 is not recognized
(...)

しかし、CheckBoxFor の行では、ラムダで MyBoolean1 が認識されません。なんで?

最初の試み:

交換するらしい

@model MyProject.SampleModel.MyCustomModel 

と:

@using MyProject.SampleModel 

コンパイル エラーはありませんが、実行時にエラーが発生します。

Compiler Error Message: CS1963: An expression tree may not contain a dynamic operation
4

1 に答える 1

1

交換

@using MyProject.SampleModel 

@model MyProject.SampleModel.MyCustomModel

エラーが示すように、ラムダ式は動的モデルをサポートしていません。モデルを定義することで、モデルを強く型付けしています。

欠陥のあるステートメントを使用すると、コードからラムダ式を削除すると、それ自体は機能する名前空間のみを参照していますが、厳密に型指定されたビューはもうありません。

敬具

//編集:

問題の核心は、1 つのビューで 2(3, 4, 5 ... n) モデルを使用する方法であることがわかりました。

モデル 1 があると仮定します。

public class MyCustomModel
{
    public bool MyBoolean1 { get; set; }
    public bool MyBoolean2 { get; set; }
}

そしてモデル 2:

public class SecondModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

これら 2 つのモデルを組み合わせた 3 番目のクラスを作成する必要があります。

public class ExampleViewModel
{
    public MyCustomModel BoolValues { get; set; }
    public SecondModel Names { get; set; }
}

これで、コントローラーアクションで ExampleViewModel をビューに返し、使用するだけです

@model MyProject.SampleModel.ExampleViewModel

次の方法でプロパティにアクセスします。

@foreach (var item in Model.BoolValues)
{
    <div>@item.Myboolean1</div>
}

@foreach (var item in Model.Names)
{
    <div>@item.FistName</div>
}
于 2013-09-20T19:40:06.693 に答える