0

私は、他のオブジェクトへの特定の参照を持つオブジェクトを渡すビューを実装しようとしています。いくつかのフィールドを編集して永続化します。問題は、オブジェクトを取得すると、これらの参照が null として返されることです。実装:

これは私がビューに渡すモデルです:

public class TicketCreationModel
{


    public SupportItem item { get; set; }
    public Ticket ticket{ get; set; }
    public Employee employee{ get; set; }




}

モデルにはチケット、サポート アイテム、従業員が含まれています。モデルをビューに渡す方法は次のとおりです。

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(true)

<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")
}

最後に、モデル オブジェクトを受け取るビューのフォームによって呼び出されるメソッドを次に示します。

[HttpPost] public 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");

    }

問題は、受け取ったモデル オブジェクトの従業員属性と項目属性が null になっていることです。これはなぜですか? これらのオブジェクトをモデルに送信していますが、なぜそれらが失われるのですか? セッションオブジェクトでそれらを復元しようとしましたが、コンテキストクラスでオブジェクトを永続化しようとするとすぐに取得します

「エンティティ オブジェクトは、IEntityChangeTracker の複数のインスタンスによって参照できません」</p>

例外。

事前に感謝します。

4

1 に答える 1

2

モデルは実際にはかなり複雑です。コントローラーには、送信されたデータからモデルを再構築する方法がありません。実際に表示する必要がある「単純な」プロパティ (文字列、int など) のみを含むビュー モデルを作成してみてください。送信すると、ストアから従業員とアイテムを取得し、それらの値を更新する必要があります。

于 2013-04-02T21:14:17.707 に答える