1

我想在 MVC 中创建一个“可编辑”表,其中每一行都有自己的下拉列表来更新行值。如何在页面加载时为之前已更新的行设置下拉列表选择值。

我当前的 Razor 代码是这样的:

<tbody>
   @foreach (var conversion in Model.PaginatedConversions)
   {
        <tr>
             <td>@conversion.tSystem.systemName</td>
             <td>@conversion.conversionStandardValue</td>
             <td>@Html.DropDownList("ConversionStandardIdFor" + conversion.conversionID.ToString(), Model.AvailableValuesForConversion, "")</td>
             <td>@conversion.conversionDescription</td>
             <td>@conversion.conversionDateInput</td>
             <td>@conversion.ConversionDateConverted</td>
             <td>@conversion.ConversionUser</td>
        </tr>
   }

但我无法设置每个下拉列表的选定值。我怎样才能做到这一点?谢谢您的帮助!

Edit1:此代码循环一个模型属性 ( Model.PaginatedConversions),它的类型是List<Conversion>。转换类如下:

public class Conversion {
    int ConversionId { get;set; }
    string ConversionValue { get; set; }
    int ConversionConvertedValue { get; set; }
}

该表的目标是为用户创建可编辑的行,以将 映射ConversionValue到可以在 中选择的另一个值Model.AvailableConversionValues。此转换后的值将存储在ConversionConvertedValue.

该属性Model.AvailableConversionValues的类型List<SelectListItem>包含用户可以选择以映射 ConversionValue 的可用值。

4

2 回答 2

2

将 ConversionValue 作为名称传递不起作用。我在 ViewModel 中创建了另一个方法,并使用它来获取 SelectListItem,传递要在 ListItem 中选择的选定值。

<td>@Html.DropDownList("ConversionFor" + conversion.conversionID.ToString(), Model.GetAvailableConversionValues(conversion.conversionStandardID))</td>

在 ViewModel 我有这个方法:

public List<SelectListItem> GetAvailableConversionValues(int? selectedValue)
    {
        if (selectedValue != null)
        {
            SelectListItem selectItem = AvailableValuesForConversion.Where(t => int.Parse(t.Value) == selectedValue).SingleOrDefault();

            if (selectItem != null)
            {
                selectItem.Selected = true;
            }
        }
        return AvailableValuesForConversion;
    }

谢谢您的帮助!

于 2012-06-11T07:53:12.587 回答
0

您可以DropDownListFor通过传递必须选择的选项值作为第一个参数并将集合作为第二个参数来使用 html 帮助器。

@Html.DropDownListFor(m => m.LastSelected, Model.AvailableValuesForConversion, "")

DropDownList设置asp.net MVC中的选中项

razor Html.DropdownList 提供“请选择”作为选项标签和“美国”作为 selectedValue

更新:

可能有一个很好的解决方案,但这就是我想出的。

问题是该DropDownList方法根据传入nameModel等搜索选定的值ViewData。所以想法是在下拉列表中添加一个属性,ViewData并将值设置为您需要在下拉列表中设置的值,然后您就完成了!

我认为您必须将 设置ConversionValue为下拉菜单,否则相应地更新代码。

   @foreach (var conversion in Model.PaginatedConversions)
   {
        var ddId = "ConversionStandardIdFor" + conversion.conversionID.ToString();

        ViewData[ddId] = conversion.ConversionValue;

        <tr>
             <td>@conversion.tSystem.systemName</td>
             <td>@conversion.conversionStandardValue</td>
             <td>@Html.DropDownList(ddId, Model.AvailableValuesForConversion, "")</td>
             <td>@conversion.conversionDescription</td>
             <td>@conversion.conversionDateInput</td>
             <td>@conversion.ConversionDateConverted</td>
             <td>@conversion.ConversionUser</td>
        </tr>
   }
于 2012-06-08T13:37:43.860 回答