Я застрял и после нескольких часов поисков думаю, мне нужно больше глазных яблок.
Ситуация следующая:
Это Asp.Net MVC3 с проектом Entity Framework 4. И у меня есть два класса. Один файл конфигурации, а другой - действие. Между этими двумя есть отношения один ко многим. Вот упрощенный взгляд на код:
public class ConfigurationFile
{
[Key, Required]
[Column(TypeName = "uniqueidentifier")]
public Guid Id { get; set; }
[Required]
public string Name { get; set; }
[Column(TypeName = "uniqueidentifier")]
[Required]
public Guid ActionId { get; set; }
public virtual Models.Action Action { get; set; }
}
public class Action
{
[Key, Required]
[Column(TypeName = "uniqueidentifier")]
public Guid Id { get; set; }
[Required]
public string ActionValue { get; set; }
}
Затем я хочу создать новый ConfigurationFile, и у меня есть два метода контроллера (и на данный момент это 95% сгенерированного кода Visual Studio 10):
// db is my context class.
//
// GET: /Configuration/Create
public ActionResult Create()
{
ViewBag.ActionId = new SelectList(db.Actions, "Id", "ActionValue");
return View();
}
//
// POST: /Configuration/Create
[HttpPost]
public ActionResult Create(Models.ConfigurationFile configurationfile)
{
if (ModelState.IsValid)
{
configurationfile.Id = Guid.NewGuid();
db.ConfigurationFiles.Add(configurationfile);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.ActionId = new SelectList(db.Actions, "Id", "ActionValue", configurationfile.ActionId);
return View(configurationfile);
}
А вот фрагмент моего представления Create:
@model MyProject.Areas.ConfigurationFile.Models.ConfigurationFile
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Configuration File</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ActionId, "Action")
</div>
<div class="editor-field">
@Html.DropDownList("ActionId", String.Empty)
@Html.ValidationMessageFor(model => model.ActionId)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
Когда я открываю страницу «Создать», я ясно вижу, что мой раскрывающийся список для класса «Действие» подходит (правильное значение - Action.Id - и текст - Action.ActionValue -), но при отправке формы , У меня возникает следующая ошибка: «Не удалось преобразовать параметр из типа« System.String »в тип« MyProject.Models.Action », поскольку преобразователь типов не может преобразовать эти типы».
Помогите пожалуйста !!