1

テーブル内のかみそりファイルで、次を使用してドロップダウンリストを設定するコードがいくつかありました。

    foreach (var item in group) {
                <tr>
                    <td>
    ...
        @Html.DropDownListFor(modelItem => item.OfficeUserId, Model.OfficeApprovers, new { @class = "officeapproverddl", invoiceLineId = @item.InvoiceLineId, officeUserId = @item.OfficeUserId })
    ...
    </td>
    </tr>
}
    </table>

これはうまくいきましたが、テーブルの外に同じドロップダウンリストが必要になりました。したがって、使用する項目オブジェクトはありません。

これをテーブルの外でどのように機能させますか。今提供しなければならないのは、Model.OfficeApprovers と html 属性だけです。

Model.OfficeApprovers のタイプは次のとおりです。new Dictionary<string, IEnumerable<SelectListItem>>();

4

2 に答える 2

2

辞書を使用している理由はありますか?

以下は、ドロップダウンにデータを入力するときに通常行うコードです。非常に単純化されているため、ドロップダウンを構築するためのベースとして使用することをお勧めします。

ビューの上部で、ビュー モデルを指定します。

@model MyProject.ViewModels.MyViewModel

私の見解では、ユーザーが選択できるすべての銀行を表示するドロップダウン リストがあります。

<table>
     <tr>
          <td><b>Bank:</b></td>
          <td>
               @Html.DropDownListFor(
                    x => x.BankId,
                    new SelectList(Model.Banks, "Id", "Name", Model.BankId),
                    "-- Select --"
               )
               @Html.ValidationMessageFor(x => x.BankId)
          </td>
     </tr>
</table>

私は常にビューのビュー モデルを持っています。ドメイン オブジェクトをビューに直接渡すことはありません。この場合、ビュー モデルには、データベースから入力される銀行のリストが含まれます。

public class MyViewModel
{
     // Other properties

     public int BankId { get; set; }
     public IEnumerable<Bank> Banks { get; set; }
}

私の銀行のドメイン モデル:

public class Bank
{
     public int Id { get; set; }
     public string Name { get; set; }
}

次に、アクション メソッドで、ビュー モデルのインスタンスを作成し、データベースから銀行リストを作成します。これが完了したら、ビュー モデルをビューに戻します。

public ActionResult MyActionMethod()
{
     MyViewModel viewModel = new ViewModel
     {
          // Database call to get all the banks
          // GetAll returns a list of Bank objects
          Banks = bankService.GetAll()
     };

     return View(viewModel);
}

これが役立つことを願っています。

于 2012-04-11T08:54:09.810 に答える
1

ここからhttp://msdn.microsoft.com/en-us/library/ee703573.aspx次の構文がDropDownListForあります。

public static MvcHtmlString DropDownListFor<TModel, TProperty>(
    this HtmlHelper<TModel> htmlHelper,
    Expression<Func<TModel, TProperty>> expression,
    IEnumerable<SelectListItem> selectList,
    Object htmlAttributes
)

DropDownListFor:を作成するときは、式を指定する必要があります。

expression: System.Linq.Expressions.Expression(Of Func(Of TModel, TProperty))
An expression that identifies the object that contains the properties to render.

したがって、あなたが望む方法は、DropDownListForでは機能しません。

この場合の最善の策は、単純なを使用すること@Html.DropDownListです。このオーバーロードを使用して、必要なことを実現できます。

public static MvcHtmlString DropDownList(
    this HtmlHelper htmlHelper,
    string name,
    IEnumerable<SelectListItem> selectList,
    IDictionary<string, Object> htmlAttributes
)

サンプル:

@Html.DropDownList("officeApprovers", Model.OfficeApprovers,
                                                   new { @class = "officeapproverddl" }

編集:

これを試してください:

@Html.DropDownList("officeApprovers", Model.OfficeApprovers.Values[0],
                                                   new { @class = "officeapproverddl" }
于 2012-04-11T01:41:50.380 に答える