我遇到了一个奇怪的问题,在页面加载时没有预先选择MVC下拉选择值。
我的模特是:
public class DocumentTypesViewModel
{
[Required(ErrorMessage = "DocumentType is required")]
public int OHDocumentTypeId { get; set; }
public string OHDocumentTypeDescription { get; set; }
}
public class ClientAdvancedSearchViewModel
{
[Display(Name = "Name")]
public string Name { get; set; }
[Display(Name = "DocumentType")]
public string DocumentTypeId { get; set; }
public IEnumerable<SelectListItem> DocumentTypes { get; set; }
}
在我的控制器中,我正在填充ClientAdvancedSearchViewModel,就像这样
[HttpGet]
public ActionResult ClientAdvancedSearch()
{
ClientAdvancedSearchViewModel clientAdvancedSearchViewModel = iClientReferralRecordsRepository.GetDocumentMetadata();
//DocumentTypes Dropdown
var ddlDocumentTypes = iDocumentTypeRepository.GetDocumentTypes();
clientAdvancedSearchViewModel.DocumentTypes = new SelectList(ddlDocumentTypes, "OHDocumentTypeId", "OHDocumentTypeDescription",clientAdvancedSearchViewModel.DocumentTypeId);
return View(clientAdvancedSearchViewModel);
}
最后在视图中:
<td>
<div class="editor-label">
@Html.LabelFor(model => model.DocumentTypes)
</div>
<div class="editor-field">
@Html.DropDownListFor(x => x.DocumentTypeId, Model.DocumentTypes, "Please Select", new { @id = "ddlDocumentType" })
</div>
</td>
我相信下拉列表的名称是相同的是x =&gt; x.DocumentTypeId,因为我认为,我的值没有预选。
这是用于下拉列表的生成HTML的ViewSource
<select id="ddlDocumentType" name="DocumentTypeId">
<option value="">Please Select</option>
<option value="20">records</option>
<option value="21"> record1</option>
...
如何重命名我的下拉列表名称或如何解决我的问题?
谢谢
更新:添加了错过的行
ClientAdvancedSearchViewModel clientAdvancedSearchViewModel = iClientReferralRecordsRepository.GetDocumentMetadata();
答案 0 :(得分:1)
您视图中的代码恰到好处。您忘记设置DocumentTypeId
的值。这是您发布的代码:
[HttpGet]
public ActionResult ClientAdvancedSearch()
{
//DocumentTypes Dropdown
var ddlDocumentTypes = iDocumentTypeRepository.GetDocumentTypes();
clientAdvancedSearchViewModel.DocumentTypes = new SelectList(ddlDocumentTypes, "OHDocumentTypeId", "OHDocumentTypeDescription",clientAdvancedSearchViewModel.DocumentTypeId);
return View(clientAdvancedSearchViewModel);
}
你错过了这个:
clientAdvancedSearchViewModel.DocumentTypeId = some_value;
此外,您打算将DocumentTypeId
作为int
而不是string
吗?
<强>更新强> 您还可以检查是否设置了这样的ID:
@Html.DropDownListFor(x => x.DocumentTypeId, new SelectList(Model.DocumentTypes, "Id", "Value", Model.DocumentTypeId), new { @id = "ddlDocumentType" })
注意我使用了new SelectList
的重载。我不记得所有的重载,我一直这样做,所以你可能会检查我们的其他重载是否符合你的需要。