Я пытаюсь реализовать представление, где передаю ему объект с определенными ссылками на другие объекты, отредактируйте некоторые поля и верните их в persis, проблема в том, что эти ссылки возвращаются утративший когда я получаю объект обратно, Heres моей реализации:Ссылки на объекты модели теряются на вид
это модель я перейти к просмотру:
public class TicketCreationModel
{
public SupportItem item { get; set; }
public Ticket ticket{ get; set; }
public Employee employee{ get; set; }
}
довольно простым, модель имеет билет, пункт поддержки и работник. Теперь Heres метод, где я прохожу свою модель к виду:
public ActionResult AssignSupportItem(int supportItemId)
{
Ticket ticket = GetTicket();
ticket.Item = repo.GetSupportItemFromId(supportItemId);
TicketCreationModel model = new TicketCreationModel();
model.employee = ticket.AccountableEmployee;
model.item = ticket.Item;
model.ticket = ticket;
return View(model);
}
GetTicket() метод на первой строке возвращает объект сеанса, вот реализация:
private Ticket GetTicket()
{
Ticket ticket = (Ticket)Session["Ticket"];
if (ticket == null)
{
ticket = new Ticket();
Session["Ticket"] = ticket;
}
return ticket;
}
Теперь Херес вид, что принимает модель и позволяет некоторые поля редактирования для билета:
@model WebUI.Controllers.TicketCreationModel
@{
ViewBag.Title = "AssignSupportItem";
}
<h2>AssignSupportItem</h2>
@using (Html.BeginForm()) { @ Html.ValidationSummary (правда)
<fieldset>
<legend>Creación ticket</legend>
<label>Descripción del problema</label>
<div class="editor-field">
@Html.EditorFor(model => model.ticket.Description)
@Html.ValidationMessageFor(model => model.ticket.Description)
</div>
@Html.HiddenFor(model => model.ticket.TicketId)
@Html.HiddenFor(model => model.item)
@Html.HiddenFor(model => model.employee)
<label>Solución aportada</label>
<div class="editor-field">
@Html.EditorFor(model => model.ticket.Solution)
@Html.ValidationMessageFor(model => model.ticket.Solution)
</div>
<label>Estado</label>
<div class="editor-field">
@Html.EditorFor(model => model.ticket.Status)
@Html.ValidationMessageFor(model => model.ticket.Status)
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
И, наконец, Heres метод вызывается форме на представлении, которое recieves модель объекта:
[HttpPost] общественных ActionResult AssignSupportItem (модель TicketCreationModel) {
Ticket final = model.ticket;
final.Item = GetTicket().Item;
final.AccountableEmployee = GetTicket().AccountableEmployee;
repo.SaveTicket(final);
ViewBag.Message = "Su ticket ha sido agregado al sistema";
return View("AssignSupportItemResponse");
}
проблема в том, что объект модели, который я получаю, имеет атрибуты employee и item как null, почему это происходит? Я отправляю эти объекты на свою модель, почему они теряются? Я попытался восстановить их с объектом сеанса, но как только я пытаюсь Персиду объект в моем контексте класса я получаю
«Объект лицо не может ссылаться несколько экземпляров IEntityChangeTracker»
исключения.
Любая помощь будет оценена, спасибо заранее.
Я думаю, что это должно работать, но нет ли способа ссылки на объекты? – oskar132
Существует разрыв между данными, которые были отправлены в представление, и данными, которые отправляются. Если вы вернете идентификаторы, вы можете использовать их для ссылки на объект из магазина. – Floremin
Да, это работает, но при проверке скрытых образов на моем представлении значение для сотрудника является серийным, что может предполагать, что ef может выбрать эту ссылку и воссоздать объект, по крайней мере, то, что я думал, ваше решение работает как шарм, спасибо много! отметит это как ответ как можно скорее – oskar132