2013-02-13 60 views
0

我有一个有点奇怪的情况,我有动态生成表单上的字段 - 所有下拉列表。这些选择对应于我想汇总在一起形成位掩码的二进制值。我这样生成下拉列表:mvc4动态生成的字段从表单丢失

<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] 

线路没有发现在我看来,动态生成的领域。

我在做什么错?

+0

你拥有包括你的窗体标记内DROPDOWNLIST明确的字符串比较? – 2013-02-13 04:59:18

+0

请发布您的完整的HTML页面,以便我们可以更好地进行分析。 – 2013-02-13 09:37:10

回答

0

我想出了我在这里做错了什么。这条线....

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

需要这样

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