Это должно быть прямолинейно, но здесь идет - мы используем MVC4 для обработки многочастного запроса формы для загрузки двоичного файла вместе с некоторыми метаданными через строго типизированный вид в MVC4.ASP.NET MVC Model Binder Fails со строками, которые выглядят как номера версий?
Одно из полей является номер версии файла (то есть что-то вроде 0.0.6, 0.4.5 предусилителя, и т.д ...)
Я получаю следующее сообщение об ошибке от модель связующего, когда он пытается связать эту версию поле номера в поле модели (типа строка):
{ "преобразование параметров из„System.String“типа к типу „Models.NewFileVersion“не удалось, потому что нет преобразователь типа может преобразовывать между этими типами. "}
В частности, ошибка может быть отнесена к нашему полю «VersionNumber» - любые идеи относительно того, почему это может произойти?
Edit: Исходный код ниже
NewFileVersion.cs
public class NewFileVersion
{
[Display(Name = "Version # (0.67, 0.66-pre, etc...)")]
[Required]
public string Version { get; set; }
[Required]
[StringLength(2000, ErrorMessage = "ChangeLog must be between 30 an 2000 characters", MinimumLength = 30)]
[Display(Name = "Version Notes (will be visible to end-users)")]
[DataType(DataType.MultilineText)]
public string ChangeLog { get; set; }
[Display(Name = "Target Platform")]
[UIHint("Enum")]
public FileType PlatformTarget { get; set; }
}
New.cshtml
@model ViewModels.NewFileVersion
@{
ViewBag.Title = "New";
}
<div class="container" id="main-content">
<div class="row">
<h2>
New</h2>
@using (Html.BeginForm("Create", "Files", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.ValidationSummary(true)
<fieldset>
<legend>NewFileVersion</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Version)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Version)
@Html.ValidationMessageFor(model => model.Version)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ChangeLog)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ChangeLog)
@Html.ValidationMessageFor(model => model.ChangeLog)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.PlatformTarget)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.PlatformTarget)
</div>
<div class="editor-label">
<label for="">
File:</label></div>
<div class="editor-field">
<input type="file" name="fileData" required="required" /></div>
<p>
<input type="submit" value="Upload File" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
</div>
</div>
FilesController.cs
[HttpPost]
public ActionResult Create(NewFileVersion version, HttpPostedFileBase fileData)
{
//if our model is valid
if(ModelState.IsValid)
{
//etc....
}
ModelState.AddModelError("", "Invalid file submission");
return View("New", version);
}
Можете ли вы опубликовать ур модельный класс и реализацию действия контроллера? Здесь нет кода, и людям было бы сложно понять. – tugberk
Из-за ошибки это не похоже, что одно из полей на самом деле является строкой. Он пытается преобразовать что-то в тип Models.NewFileVersion. Это тип перечисления? Но, как @tugberk говорит, если бы вы могли опубликовать список кода, который бы помог. – ngm
@tugberk сделано и сделано - добавлен исходный код. Здесь есть поле enum (и у меня есть собственный шаблон редактора для него), но это не значит, что привязка модели бросает ошибку. Он не работает в поле «версия» в верхней части страницы. – Aaronontheweb