0

Я пытаюсь реализовать представление, где передаю ему объект с определенными ссылками на другие объекты, отредактируйте некоторые поля и верните их в 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»

исключения.

Любая помощь будет оценена, спасибо заранее.

ответ

2

Ваша модель на самом деле довольно сложная. Контроллер не имеет возможности повторно собрать модель, которую вы получили из представленных данных. Попробуйте создать модель представления, содержащую только «простые» свойства (т. Е. Строки, int и т. Д.), Которые вам действительно нужно отобразить. При представлении вам нужно будет получить сотрудника и элемент из магазина, а затем обновить их значения.

+0

Я думаю, что это должно работать, но нет ли способа ссылки на объекты? – oskar132

+0

Существует разрыв между данными, которые были отправлены в представление, и данными, которые отправляются. Если вы вернете идентификаторы, вы можете использовать их для ссылки на объект из магазина. – Floremin

+0

Да, это работает, но при проверке скрытых образов на моем представлении значение для сотрудника является серийным, что может предполагать, что ef может выбрать эту ссылку и воссоздать объект, по крайней мере, то, что я думал, ваше решение работает как шарм, спасибо много! отметит это как ответ как можно скорее – oskar132

Смежные вопросы