Asp.net mvc 3 MVC3下拉列表-HttpPost上的模型状态错误
我在[HttpPost]方法上的Dropdownlist出现以下错误。值绑定正确,这不是问题。但是模型状态中始终存在一个错误。错误是: 从类型“System.String”到类型“System.Web.Mvc.SelectListItem”的参数转换失败,因为没有类型转换器可以在这些类型之间转换。 在我的模型中,我使用了以下内容Asp.net mvc 3 MVC3下拉列表-HttpPost上的模型状态错误,asp.net-mvc-3,drop-down-menu,Asp.net Mvc 3,Drop Down Menu,我在[HttpPost]方法上的Dropdownlist出现以下错误。值绑定正确,这不是问题。但是模型状态中始终存在一个错误。错误是: 从类型“System.String”到类型“System.Web.Mvc.SelectListItem”的参数转换失败,因为没有类型转换器可以在这些类型之间转换。 在我的模型中,我使用了以下内容 public class UploadDocumentViewModel { [Display(Name = "Document Titl
public class UploadDocumentViewModel {
[Display(Name = "Document Title")]
public string DocumentTitle { get; set; }
public IEnumerable<SelectListItem> FileType { get; set; }
}
在控制器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();}
@model xxx.Core.model.UploadDocumentViewModel
@{
ViewBag.Title=“上传文档”;
}
上载客户端文档
@Html.ValidationSummary()
@使用(Html.BeginForm(“UploadDocument”、“Document”、“FormMethod.Post”))
{
上载客户端文档
@LabelFor(model=>model.DocumentTitle)
@Html.TextBoxFor(model=>model.DocumentTitle,新的{@id=“txtDocumentTitle”})
@Html.ValidationMessageFor(model=>model.DocumentTitle)
@LabelFor(model=>model.FileType)
@DropDownListFor(model=>model.FileType,model.FileType,“请选择”,新建{@id=“ddlFileType”})
}
@{Html.EndForm();}
更改此行
@Html.DropDownListFor(model => model.FileType, Model.FileType, "Please Select", new { @id = "ddlFileType" })
到
并向模型中添加字符串属性
FileTypeId
,以便在发布时获得所选项目UploadDocumentViewModel'不包含“FileTypeId”的定义,也不包含接受类型的第一个参数的扩展方法“FileTypeId”。这是一个编译时错误,您需要在中添加该属性,它将返回选定的项目ID-只需在UploadDocumentViewModel中添加字符串属性,它就会工作。谢谢,它真的帮助了我们
@Html.DropDownListFor(model => model.FileType, Model.FileType, "Please Select", new { @id = "ddlFileType" })
@Html.DropDownListFor(model => model.FileTypeId, Model.FileType, "Please Select", new { @id = "ddlFileType" })