0

アカウントと呼ばれるエンティティのコレクションがあります。1 人のユーザーが複数のアカウントを持ち、アカウントごとにパーセンテージを設定できます。

UI にはすべてのアカウントが一覧表示され、各アカウントの編集可能なフィールドは Percentage プロパティです。これはテキストボックスで表されます。

ユーザーが何らかの調整を行うと、処理のためにフォームがポストバックされます。

私は他のいくつかのプロジェクトで MVC を使用しており、モデル バインディングは理解していますが、モデルのコレクションを処理する際の進め方がわかりません。

私はコードや、誰かが私のために完全な答えを書いてくれるのを探しているわけではありません (ただし、正直なところ、私は文句を言いません....)。進むべき方向のガイダンスを探しています。

前もって感謝します。

4

2 に答える 2

1

2つのこと:

1) 包括的なページ ビュー モデルで、アカウントのリスト/コレクションまたは AccountViewModel のリスト/コレクションを使用する必要があります。

だから、あなたは持っているでしょう

public class MyPageViewModel
{
    public Collection<Account> AccountList; 
    //AccountViewModel is what I'd use but for simplicity
    //Other properties for view model
}

これで、アカウントのリストを含むビュー モデルが作成されました。

2)

あなたの見解では、2 つの選択肢があります。

a)forループを作成して、各アカウントに必要なHTMLを吐き出すだけです(特にきれいではありません)

b) エディター テンプレートを作成して、特別なことをする必要がないようにします。ページにはこれが含まれます。

@Html.EditorFor(model => model.AccountList)

エディタ テンプレートの設定方法は次のとおりです。

ここに画像の説明を入力

これは、私が現在取り組んでいるプロジェクトからのものです。ここでのポイントは、作業中のものと一致するビュー フォルダーの下に「EditorTemplates」フォルダーを追加することです。慣例により、MVC は、EditorFor を使用するときに、このフォルダーでテンプレートを検索します。これで、厳密に型指定されたテンプレート (Account または AccountViewModel オブジェクトを受け取る) に必要な HTML を挿入するだけで完了です。各アカウントの HTML を吐き出すために、ビューに for ループは必要ありません。

本当に、その時点でそれはそれでしょう。投稿アクションは、必要な更新されたデータを持つ MyPageViewModel のタイプにモデル バインドします。

正しい方向に向けられることを願っています。

于 2012-05-16T17:05:21.390 に答える
1

これはあなたのタスクを解決する方法の例です

まず、モデルを定義しましょう:

public class Account
{
    public int Id { get; set; }
    public string Number { get; set; }
    public decimal Percentage { get; set; }
}

public class UserEditModel
{
    public ICollection<Account> Accounts { get; set; }
}

UserEditModel はビュー モデルです。これには、Account のコレクションとして宣言された Accounts プロパティが含まれます。

勘定科目を表示し、そのパーセンテージを編集するビューで表を記述します。

<form action="Url.Action("Save")" method="POST">
<table>
  <thead>
    <tr>
       <td>Number</td>
       <td>Percentage</td>
    </tr>
  </thead>
  <tbody>
    @for (var i = 0; i < Model.Accounts.Count(); i ++)
    {
      <tr>
         <td>
            @Html.HiddenFor(m => m.Accounts[i].Id)
            @Html.HiddenFor(m => m.Accounts[i].Number)
            @Model.Accounts[i].Number
         </td>
         <td>
            @Html.TextBoxFor(m => m.Accounts[i].Id)
         </td>
      </tr>
    }
  </tbody>
</table>
</form>

ビュー モデルの Accounts プロパティでフォームを送信すると、パーセンテージのユーザー値によって変更されます。

于 2012-05-17T13:57:55.633 に答える