2013-03-19 48 views
0

我在[HttpPost]方法上的Dropdownlist出現以下錯誤。這些值綁定正確,這不是問題。但是模型狀態一直存在錯誤。錯誤是:MVC3下拉列表 - 在HttpPost上的模型狀態錯誤

從類型'System.String'到類型'System.Web.Mvc.SelectListItem'的參數轉換失敗,因爲沒有類型轉換器可以在這些類型之間進行轉換。

在我的模型中,我使用了以下內容。

public class UploadDocumentViewModel { 



     [Display(Name = "Document Title")] 
     public string DocumentTitle { get; set; } 



     public IEnumerable<SelectListItem> FileType { get; set; } 

    } 

FileTypeViewModel:

public class FileTypeViewModel 
    { 
     public string FileTypeId { get; set; } 
     public string FileTypeDescription { get; set; } 
    } 

在Controller HTTPGET

[HttpGet] 
     public ActionResult UploadDocument() 
     { 

      var fileTypes = iFileTypeRepository.GetFileTypes(); // This is for FileType DropDownlist of values 


      UploadDocumentViewModel uploadDocumentViewModel = new UploadDocumentViewModel 
      { 

       FileType = fileTypes.Select(x => new SelectListItem 
       { 
        Text = x.FileTypeDescription, 
        Value = Convert.ToString(x.FileTypeId) 
       }).ToList() 
      }; 
      return View(uploadDocumentViewModel); 

     } 

在[HttpPost]方法

public ActionResult UploadDocument(FormCollection form,UploadDocumentViewModel uploadDocumentViewModel) 
     { 


      //FileTypes 
      string ddlFileTypeSelectedValue = Convert.ToString(form["FileType"]); 
      var ddlFileType = iFileTypeRepository.GetFileTypes(); 
      uploadDocumentViewModel.FileType = new SelectList(ddlFileType, "FileTypeId", "FileTypeDescription", ddlFileTypeSelectedValue);   



      // No Errors, then Submit 
      if (ModelState.IsValid) 
      { 
       -- Redirect to some other View 
      } 

      else 
      { 
       return View(uploadDocumentViewModel); 
      } 

     } 

在查看

@model xxx.Core.Model.UploadDocumentViewModel 
@{ 
    ViewBag.Title = "Upload Document"; 
} 
<h2> 
    Upload Client Document</h2> 
@Html.ValidationSummary() 
@using (Html.BeginForm("UploadDocument", "Document", "FormMethod.Post")) 
{ 
     <div> 
     <fieldset> 
      <legend>Upload Client Document</legend> 
       <div class="editor-label"> 
        @Html.LabelFor(model => model.DocumentTitle) 
       </div> 
       <div class="demo"> 
        @Html.TextBoxFor(model => model.DocumentTitle, new { @id = "txtDocumentTitle" }) 
        @Html.ValidationMessageFor(model => model.DocumentTitle) 
        </div> 
        <div> 
         @Html.LabelFor(model => model.FileType) 
        </div> 
        <div> 
         @Html.DropDownListFor(model => model.FileType, Model.FileType, "Please Select", new { @id = "ddlFileType" }) 

        </div> 
      </fieldset> 
       </div> 
       <br />  
} 
@{Html.EndForm();} 

回答

2

改變這一行

@Html.DropDownListFor(model => model.FileType, Model.FileType, "Please Select", new { @id = "ddlFileType" }) 

@Html.DropDownListFor(model => model.FileTypeId, Model.FileType, "Please Select", new { @id = "ddlFileType" }) 

和財產FileTypeId添加一個字符串到模型中,這樣當你發佈你所選項目

+0

UploadDocumentViewModel'不包含'FileTypeId'的定義,也沒有接受第一個參數類型的擴展方法'FileTypeId'。這是編譯時間錯誤 – 2013-03-19 10:33:23

+0

您需要添加該屬性在您的,它會返回選定的項目編號 – 2013-03-19 10:34:49

+0

可以接受添加一個新的屬性? – 2013-03-19 10:52:00