У меня есть следующая ошибка, смотрящая меня в лицо.Элемент модели, переданный в словарь, имеет тип «System.Data.Entity.DynamicProxies.game
Модели элемент передается в словарь типа «System.Data.Entity.DynamicProxies.game_04BC2EA428E3397C72CED2755A5A78B93F676BBC970F6B9A8635AD53B08FEBCB», но этот словарь требует модель элемента типа «» TeamBuildingCompetition.ViewModels.EditGameVM
У меня есть ASP Приложение .NET NVC 5 для интрасети. Я создал представление вида из модели представления для обновления содержимого моей базы данных. Контент данной базы данных представляет собой содержимое html, которое было размещено в текстовом редакторе. Когда я загружаю вид редактирования, он показывает указанную выше ошибку.
Ниже мой взгляд редактирования:
@model TeamBuildingCompetition.ViewModels.EditGameVM
@{
ViewBag.Title = "Edit";
Layout = "~/Views/Shared/_Layout_new.cshtml";
}
<script>
tinymce.init({ selector: '#description' });
tinymce.init({ selector: '#gameRule' });
</script>
@using (Html.BeginForm("Update", "Game", FormMethod.Post))
{
@Html.AntiForgeryToken()
<section id="middle">
<div class="container">
<div class="form-horizontal">
<div class="center"><h1>Edit Games </h1></div>
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.gameID)
<div class="form-group">
@Html.LabelFor(model => model.gameName, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-8">
@Html.EditorFor(model => model.gameName, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.gameName, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.description, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-8">
@Html.EditorFor(model => model.description, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.description, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.gameRule, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-8">
@Html.EditorFor(model => model.gameRule, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.gameRule, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.gamePicture, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-8">
@Html.TextBoxFor(model => model.gamePicture, new { @type = "file", @name = "gamePicture" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
</div>
</section>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
Ниже вид Модель для редактирования Вид:
namespace TeamBuildingCompetition.ViewModels
{
public class EditGameVM
{
public int gameID { get; set; }
[Required]
[Display(Name = "Game Name")]
public string gameName { get; set; }
[Required][AllowHtml]
[Display(Name = "Description")]
public string description { get; set; }
[Required]
[AllowHtml]
[Display(Name = "Game Rules")]
public string gameRule { get; set; }
[Display(Name = "Game Picture")]
public string gamePicture { get; set; }
}
}
И, наконец, вот контроллер сделать обновление:
public ActionResult Update(EditGameVM model)
{
try {
game objGame = new game
{
gameID = model.gameID,
gameName = model.gameName,
description = model.description,
gameRule = model.gameRule,
gamePicture = model.gamePicture.ToString()
};
objBs.gameBs.Update(objGame);
TempData["Msg"] = "Created Successfully!";
return RedirectToAction("Edit");
}
catch (DbEntityValidationException dbEx)
{
var sb = new StringBuilder();
foreach (var validationErrors in dbEx.EntityValidationErrors)
{
foreach (var validationError in validationErrors.ValidationErrors)
{
sb.AppendLine(string.Format("Entity:'{0}' Property: '{1}' Error: '{2}'",
validationErrors.Entry.Entity.GetType().FullName,
validationError.PropertyName,
validationError.ErrorMessage));
}
}
//throw new Exception(string.Format("Failed saving data: '{0}'", sb.ToString()), dbEx);
TempData["Msg"] = sb.ToString();
return RedirectToAction("Edit");
}
}
Вот мой метод получения:
public ActionResult Edit(int id = 0)
{
if (id == 0)
{
id = 1;
}
var gameList = objBs.gameBs.GetByID(id);
return View(gameList);
}
Я по достоинству оценит все усилия по разрешению этого вопроса.
Сообщение само собой разумеется - вы не передаете правильную модель виду. Но вы не указали свой метод GET, который порождает ошибку. –
У меня есть метод Get в моем вопросе – Guzzyman
'objBs.gameBs.GetByID (id)' не возвращает модель, которая является типом 'EditGameVM', поэтому исключение. Вам нужно инициализировать и экземпляр 'EditGameVM', установить его свойства на основе' gameList', а затем вернуть модель представления. –