单击时在同一页面上加载局部视图

时间:2014-01-29 14:06:52

标签: asp.net asp.net-mvc

我的“编辑客户”页面有一个部分视图,显示他/她的所有发票:

@{Html.RenderAction("_ShowInvoices", "Adresser", new { id = Model.Adressid });}

该部分视图具有此链接以在新页面中打开“发票编辑”页面:

Html.ActionLink(item.InvoiceNr, "Edit", "Invoice", new { id = item.InvoiceNr }, null)

但是现在我想在Edit Custormer页面的另一个局部视图中打开Invoice Edit页面。所以我将发票编辑页面上的链接更改为

@Ajax.ActionLink(item.InvoiceNr.ToString(), "EditInvoice", "Invoice", new { id = item.InvoiceNr }, new AjaxOptions() { UpdateTargetId = "edit_invoices" })

发票控制器:

    public PartialViewResult EditInvoce(int id)
    {
        Invoices invoice = db.Prens.Find(id);
        return PartialView("_InvoiceEdit", invoice);
    }

并将其添加到我的“编辑客户”页面

        <div id="edit_invoices">
            @Html.Partial("_InvoiceEdit")
        </div>

现在包含这个,所以我可以看看它是否有效..

@model Pren.Models.Invoices
@Html.DisplayFor(model => model.InvoiceNr)

我还将此添加到我的客户编辑页面

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>

我得到的错误是(Pren.Models.Adress是客户模型)

  

传递到字典中的模型项是'Pren.Models.Adress'类型,但是这个字典需要一个'Pren.Models.Invoices'类型的模型项。

     

第138行:@ Html.Partial(“_ InvoiceEdit”)

那我在哪里错了?是@Html.Partial()使用错误吗?我应该这样做吗?请给我你的意见!

2 个答案:

答案 0 :(得分:1)

您可以将@Html.Partial("_InvoiceEdit")退出:

<div id="edit_invoices">
    @Html.Partial("_InvoiceEdit")
</div>

主要是因为您应该像@Html.Partial("_InvoiceEdit", model)那样将模型传递给它,并且因为该页面的模型不是正确的类型,所以它无论如何都不会起作用(因此,您的错误)。

@Ajax.ActionLink会处理将部分加载到<div id="edit_invoices">

答案 1 :(得分:0)

您需要传递_InvoiceEdit的模型,如下所示

   @Html.Partial("_InvoiceEdit", invoices)

这将使用返回地址模型的相同请求呈现部分视图,但是_InvoiceEdit需要发票类型。在这种情况下,我们需要填充发票并将其发送到视图以使用它进行渲染。

选项2:

如果您没有在当前操作中填充发票,则可以根据ID发起新请求以获取发票。

  @{Html.RenderAction("EditInvoice", "Invoices", new { id = Model.id});}