我想在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>
。 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。
答案 0 :(得分: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;
}
感谢您的帮助!
答案 1 :(得分:0)
您可以通过传递必须选择作为第一个参数的选项的值并将集合作为第二个参数来使用DropDownListFor
html帮助器。
@Html.DropDownListFor(m => m.LastSelected, Model.AvailableValuesForConversion, "")
DropDownList setting selected item in asp.net MVC
razor Html.DropdownList provide "Please select" as optionLabel AND "US" as selectedValue
<强>更新强>
可能有一个很好的解决方案,但这就是我的想法。
问题是DropDownList
方法根据name
,Model
等中传递的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>
}