下拉列表未选择预选值-mvc3

时间:2013-04-04 13:19:35

标签: asp.net-mvc-3

我遇到了一个奇怪的问题,在页面加载时没有预先选择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();

1 个答案:

答案 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的重载。我不记得所有的重载,我一直这样做,所以你可能会检查我们的其他重载是否符合你的需要。