Asp.net mvc 基于另一个单元格(MVC)在表格中设置dropdownlist选定值

Asp.net mvc 基于另一个单元格(MVC)在表格中设置dropdownlist选定值,asp.net-mvc,razor,drop-down-menu,Asp.net Mvc,Razor,Drop Down Menu,我想在MVC中创建一个“可编辑”表,其中每一行都有自己的dropdownlist来更新行值。如何在页面加载时为之前已更新的行设置dropdownlist selected值 我当前的Razor代码如下: <tbody> @foreach (var conversion in Model.PaginatedConversions) { <tr> <td>@conversion.tSystem.systemNa

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

我当前的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>
   }
该表的目标是为用户创建可编辑行,以便将
转换值
映射到可在
模型中选择的另一个值。AvailableVersionValues
。此转换值将存储在
ConversionConvertedValue


属性
Model.AvailableVersionValues
的类型为
列表
,其中包含用户可以从中选择的可用值来映射转换值。

您可以使用
DropDownList for
html帮助器,方法是将必须选择的选项值作为第一个参数,将集合作为第一个参数第二

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

更新:

也许有一个很好的解决办法,但这就是我想到的

问题是
DropDownList
方法根据
Model
ViewData
等中传递的
name
搜索所选值。因此,想法是在
ViewData
中添加一个属性,使用下拉列表的名称,并将值设置为需要在下拉列表中设置的值,这样就完成了

我想您必须将
转换值设置为下拉列表,否则相应地更新代码

   @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>
   }
@foreach(Model.PaginatedConversions中的var转换)
{
var ddId=“ConversionStandardIdFor”+conversion.conversionID.ToString();
ViewData[ddId]=conversion.ConversionValue;
@conversion.tSystem.systemName
@conversion.conversion标准值
@Html.DropDownList(ddId,Model.AvailableValuesForConversion,“”)
@conversion.conversionDescription
@conversion.conversionDateInput
@conversion.conversionDateConversion
@conversion.ConversionUser
}

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

<td>@Html.DropDownList("ConversionFor" + conversion.conversionID.ToString(), Model.GetAvailableConversionValues(conversion.conversionStandardID))</td>
@Html.DropDownList(“ConversionFor”+conversion.conversionID.ToString(),Model.GetAvailableConversionValues(conversion.conversionStandardID))
在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;
    }
公共列表GetAvailableVersionValue(int?selectedValue)
{
如果(selectedValue!=null)
{
SelectListItem selectItem=AvailableValuesForConversion.Where(t=>int.Parse(t.Value)==selectedValue.SingleOrDefault();
如果(selectItem!=null)
{
selectItem.Selected=true;
}
}
返回AvailableValuesForConversion;
}

谢谢你的帮助

使用DropDownListFor的问题是,我没有从模型中获取所选的值。但是从模型的一个属性来看,我正在循环创建表行(Model.PaginatedConversions),您可以发布这个类Model.AvailableValuesForConversion吗?
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;
    }