0

HTML.DropDownListFor を使用してタグの「値」属性を動的に生成しようとしていますが、問題が発生しています。forループをハードコーディングして生のHTMLを挿入することだけを考えていますが、これを行う簡単な方法があると確信しています(?)

私はビューモデルを持っています:

    public class DSDCustomerViewModel
        {
            public IEnumerable<dsd_l_chain> chainBuild { get; set; }
            public string Id_dsd { get; set; }
            public string Owner { get; set; }
            public IEnumerable<string> WFCategory { get; set; }
            public IEnumerable<string> TransactionType { get; set; } 
[etc etc etc]

chainBuild プロパティは、次のようにビューの拡張メソッドを使用して入力するデータベース (EF を使用) から取得されます。

@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)
    <table>
        <tbody>
[etc etc]
<td colspan="1" rowspan="1">
                    Chain Name
                </td>
                <td colspan="1" style="vertical-align: top;">
                    @Html.DropDownListFor(model => model.cc_chainName, new SelectList(Model.cc_chainName), "Select ...")
                </td>
                <td rowspan="1" colspan="2" style="vertical-align: top;">
                    @Html.ValidationMessageFor(model => model.cc_chainName)
                </td>
[etc etc]

cc_chainName EF オブジェクトには、属性「Chain_Desc」、「Chain」、「Chain_Group」、および「ID」があります。

生成された HTML は次のとおりです。

<select id="cc_chainName" name="cc_chainName"><option value="">Select ...</option>
<option>1ST STOP</option>
<option>3 RIVERS ICE CREAM SPCLTS</option>
<option>3RIVERS SALES TO NON-NAP CUSTS</option>

変更方法:

@Html.DropDownListFor(model => model.cc_chainName, new SelectList(Model.cc_chainName), "Select ...")

...生成された HTML コードがタグの「値」属性を cc_chainName.ID に設定するように? 生成された HTML は次のようになります。

<select id="cc_chainName" name="cc_chainName"><option value="">Select ...</option>
<option value="1">1ST STOP</option>
<option value="2">3 RIVERS ICE CREAM SPCLTS</option>
<option value="3">3RIVERS SALES TO NON-NAP CUSTS</option>

「値」タグには cc_chainName モデルの ID が含まれていることに注意してください

ありがとう!

4

2 に答える 2

3

それぞれSelectListがコンストラクターでdataValueFieldanddataTextFieldプロパティを受け取ります。

@Html.DropDownListFor(model => model.cc_chainName, 
                     new SelectList(Model.cc_chainName, 
                                    "ID", "TextualPropertyNameHere"), "Select ...")
                            //      ^^ id property and text property here

テキスト プロパティ名を指定しなかったため、上記は次のようなモデルを想定しています。

class cc_chainName {
    public int ID { get; set; }
    public string TextualPropertyNameHere { get; set; }
}

編集:

あなたのコメントに応えて。

次のモデルを検討してください。

public class Product {
    public int Id { get; set; }
    public string ProductName { get; set; }
}

ビューで列挙可能として設定すると、次のようになります。

@model IEnumerable<YourApplication.Models.Product>

..このコントローラ アクションで:

var products = new List<Product>()
{
    new Product() { Id = 1, ProductName = "Lollies" },
    new Product() { Id = 2, ProductName = "Beer" },
    new Product() { Id = 3, ProductName = "Funny Hat" }
};

return View(products);

これDropDownList(プロパティ名は 内の文字列であることに注意してSelectListください):

@Html.DropDownList("myDropDown", new SelectList(Model, "Id", "ProductName"), "-- Select item --")

次のマークアップを生成します。

<select id="myDropDown" name="myDropDown">
    <option value="">-- Select item --</option>
    <option value="1">Lollies</option>
    <option value="2">Beer</option>
    <option value="3">Funny Hat</option>
</select>

必要なものを取得するには、両方の文字列に「ProductName」を明示的に渡すことができます..次のように:

@Html.DropDownList("myDropDown", new SelectList(Model, "ProductName", "ProductName"), "-- Select item --")

生成するもの:

<select id="myDropDown" name="myDropDown">
    <option value="">-- Select item --</option>
    <option value="Lollies">Lollies</option>
    <option value="Beer">Beer</option>
    <option value="Funny Hat">Funny Hat</option>
</select>
于 2013-09-05T00:07:19.067 に答える
0

異なるオプション要素をどのように考慮しますか? データベースからのいくつかの要素が繰り返される DropDownList があります。値属性または個別の要素のいずれかしか取得できないようです。

そのための私のコードは次のとおりです。

@Html.DropDownList("ResidentialBuilding", new SelectList(Model.Select(x => x.type).Distinct()))
于 2014-06-20T19:19:41.260 に答える