我正在使用VS 2010与MVC 3和EF 5.我正在使用下拉列表的通用模式,除了一个实例之外的所有实例都能正常工作,我无法理解为什么这个模式未能在选择列表中选择正确的条目。以下是代码片段。
选择列表创建如下:
public static IEnumerable<SelectListItem> GetOutcomes()
{
CodesEntities dataContextCodes = new CodesEntities(ConnectionString);
return new SelectList(dataContextCodes.CodeOutcome.
Where(x => x.DisplayOrder > 0).OrderBy(x => x.DisplayOrder),
"OutcomeCodeID", "Outcome");
}
返回正确的选择列表。
该视图包含以下代码:
@Html.DropDownListFor(m => m.OutcomeCodeID,
PerintalFormViewModels.GetOutcomes(), "Please select an item")
模型值m.OutcomeCodeID
具有有效值(1),但未选择任何项目。
生成的HTML是:
<select id="CodeID" name="OutcomeCodeID" data-val-required="Outcome is required" data-val-number="The field outcome must be a number." data-val="true">
<option value="">Please select an item</option>
<option value="1">Termination</option>
<option value="2">Loss</option>
<option value="3">Still</option>
<option value="4">Live</option>
</select>
我在头发撕裂,被驱赶坚果阶段。有没有人有任何想法?
由于
答案 0 :(得分:1)
你可以这样做:
public static IEnumerable<SelectListItem> GetOutcomes(string selectedID)
{
CodesEntities dataContextCodes = new CodesEntities(ConnectionString);
return new SelectList(dataContextCodes.CodeOutcome.
Where(x => x.DisplayOrder > 0).OrderBy(x => x.DisplayOrder),
"OutcomeCodeID", "Outcome"
, selectedID); // add this parameter
}
或者这个:
public static IEnumerable<SelectListItem> GetOutcomes(string selectedID)
{
CodesEntities dataContextCodes = new CodesEntities(ConnectionString);
return
dataContextCodes.CodeOutCome
.Where(x => x.DisplayOrder > 0)
.OrderBy(x => x.DisplayOrder)
.ToList()
.Select(x => new SelectListItem
{
Value = x.OutcomeCodeID.ToString(),
Text = x.Outcome.ToString(),
Selected = x.OutcomeCodeID == selectedID
});
}
然后这样称呼:
@Html.DropDownListFor(m => m.OutcomeCodeID,
PerintalFormViewModels.GetOutcomes(Model.OutcomeCodeID),
"Please select an item")
答案 1 :(得分:0)
您没有在任何地方设置默认选定值。
您用于SelectList的特定构造函数是这样的:
public SelectList(
IEnumerable items,
string dataValueField,
string dataTextField
)
其中未设置默认值。要么你使用这个:
public SelectList(
IEnumerable items,
string dataValueField,
string dataTextField,
Object selectedValue
)
并指定 selectedValue 或者在要选择的项目上手动将SelectedListItem的Selected属性设置为true(http://msdn.microsoft.com/en-us/library/system.web .mvc.selectlistitem(v = vs.108)的.aspx)。
这是一个无耻的插件,但我认为这是一个很好的资源:http://blinkingcaret.wordpress.com/2012/08/11/using-html-dropdownlistfor/