0

フォーム上に動的にフィールドを生成したという奇妙な状況があります。すべてのドロップダウンリストです。選択範囲は、ビットマスクを形成するために合計したいバイナリ値に対応しています。私はこの方法でドロップダウンを生成しています:

<table class="center">
    @foreach (var field in Model.Fields)
    {
        <tr>
            <td>@field.DisplayText:</td>
            <td>
                @Html.DropDownList(field.FieldName, new SelectList(field.Options, "FlagValue", "Text", field.SelectedValue), "(doesn't matter)")                
            </td>
        </tr>
    }
</table>

ビューに適切なHTMLをレンダリングする限り、これは機能しているようです。しかし、私のコントローラーはフィールドでの選択を受け取っていません。動的フィールドをループするためにこれを試しました。

以下のコードでは、PatientSelectorEditorが私のViewModelです。

    private void GetFlagInfo(PatientSelectorEditor pse, out string description, out long flags)
    {
        description = null;
        flags = 0;

        // get list of all possible fields that could be in the view.
        pse.Fields = InitPatientSelectorFields(0);
        foreach (PriceFlagField field in pse.Fields)
        {                
            foreach (var option in field.Options)
            {
                // was something selected here?
                if (Request[field.FieldName].Equals(option.FlagValue))
                {
                    description += ", " + option.Text;
                    flags += option.FlagValue;
                }
            }                
        }            
    }

行くライン

 Request[field.Name]

ビューで動的に生成されたフィールドが見つかりません。

私は何が間違っているのですか?

4

1 に答える 1

0

私はここで自分が間違っていることを理解しました。この行...

if (Request[field.FieldName].Equals(option.FlagValue))

このような明示的な文字列比較が必要でした

if (Request[field.FieldName].Equals(option.FlagValue.ToString()))
于 2013-02-14T00:24:02.433 に答える