3

私の Web アプリケーションには、管理者が一括で承認または拒否できる「要求」のリストを含むページがあります。したがって、ページは次のようになります。

[x] Request 1
[ ] Request 2
[x] Request 3
[ ] Request 4

[Approve Selected]   [Deny Selected]

私のモデルは次のようになります。

public class RequestManagementModel
{
    public List<string> LicenseIdsToProcess { get; set; }
    public List<Resource> Resources { get; set; }
    // additional fields
}

そして私の見解では、私は持っています:

int counter = 0;
@foreach (Resource r in Model.Resources)
{
    <tr>
        <td>
            @Html.CheckBoxFor(model => model.LicenseIdsToProcess[counter++], new { value = r.RequestId })
        </td>
    </tr>
}

そしてもちろん、私のコントローラーアクションはフォーム投稿でモデルを受け入れます

public ActionResult ProcessRequests(RequestManagementModel model, ProcessType type)
{
    // process requests here
}

したがって、ご想像のとおり、ビューでmodel.LicenseIdsToProcess[counter++]「型 'string' を 'bool' に暗黙的に変換できません」というエラーが表示されます。単一の true/false ではなく、ユーザーが 1 つまたは複数の値を選択できる値のリストを表すためにチェックボックスを使用しようとしているという事実は気に入りません。

ユーザーが選択するすべてのチェックボックスに対して、フォームが投稿されたときにその文字列 ID 値がモデル内の ID のリストにバインドされるように、これを設定したいと思います。<input type="checkbox">そこにチェックボックスの値を設定できるので、を使用するだけでそれを行う方法を知っています。しかし、Html.CheckBoxFor でそれを使用して、モデル バインディングを通じて強力な型指定を実現する方法はありますか?

ありがとう。

4

1 に答える 1

4

リストは次のようにする必要があります。

public class RequestManagementModel
{
    public Dictionary<string, bool> LicenseIdsToProcess { get; set; }
    public List<Resource> Resources { get; set; }
    // additional fields
}

LicenseIdsToProcess現在はHtml.CheckBoxFor() であるためList<string>、文字列値をブール値に変換できません。辞書やリストのようなものを使用する必要があります。

public class Licence
{
    public string Id { get; set; }
    public bool Processed { get;set; }
}

public class RequestManagementModel
{
    public List<Licence> LicenseIdsToProcess { get; set; }
    public List<Resource> Resources { get; set; }
    // additional fields
}

int counter = 0;
@foreach (Resource r in Model.Resources)
{
    <tr>
        <td>
            @Html.CheckBoxFor(model => model.License[counter++].Processed, new { value = r.RequestId })
        </td>
    </tr>
}

またはそのようなもの:)

編集:

コメントに応えて、私のコードが間違っていることに気付きました。更新されたバージョンは次のとおりです。

@for(int idx = 0; idx < Model.Resources.Count; idx++)
{
    <tr>
        <td>
            @Html.CheckBoxFor(model => model.License[idx].Processed, new { value = Model.Resources[idx].RequestId })
        </td>
    </tr>
}
于 2012-10-08T19:45:02.140 に答える