我必须创建一张发票视图。我有很多模型(表格),我想在一张发票视图中显示多个模型的所有数据。我创建了一个空的(没有模型)视图并放入了部分视图。部分视图之一返回一个视图与一个模型,但此解决方案返回异常...这是我的工作: 这是我在控制器中的行为:
public ActionResult Customer()
{
var data = db.Customer;
return PartialView("Index", data);
}
public ActionResult Invoice()
{
var data = db.Invoice;
return PartialView("Index", data);
}
public ActionResult Dealer()
{
var data = db.Dealer;
return PartialView("Index", data);
}
public ActionResult Paid()
{
var data = dane.Paid;
return PartialView("Index", data);
}
public ActionResult Products()
{
var data = dane.Products;
return PartialView("Index", data);
}
这是部分观点之一:
@model IEnumerable<Invoice_v1._0.Models.Products>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.Price)
</th>
<th>
@Html.DisplayNameFor(model => model.Amount)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Price)
</td>
<td>
@Html.DisplayFor(modelItem => item.Amount)
</td>
</tr>
}
</table>
这是我的“索引”视图,带有部分视图:
@Html.Partial("_Customer")
@Html.Partial("_Invoice")
@Html.Partial("_Dealer")
@Html.Partial("_Paid")
@Html.Partial("_Products")
我该如何修复它们?
答案 0 :(得分:2)
如果您坚持使用单个视图,那么您可以使部分视图呈现为条件:
if (Model != null && Model is Customer)
Html.Partial("_Customer", Model as Customer)
,等等。
在相关的说明中,由于所有模型都是独占的(您从不拥有多个对象),因此我没有看到拥有一个索引视图的重点。您已经为每个类提供了一个(部分)视图,那么为什么不将它们用作常规视图呢?
<强>更新强>
如果您选择从每个操作方法返回单独的视图,则可以通过指定每个视图的名称来执行此操作。有关详细信息,请参阅此问题:How to return ActionResult with specific View (not the controller name)
在您的特定情况下,这意味着:
public ActionResult Customer()
{
return View("_Customer", db.Customer);
}
public ActionResult Invoice()
{
return View("_Invoice", db.Invoice);
}
public ActionResult Dealer()
{
return View("_Dealer", db.Dealer);
}
public ActionResult Paid()
{
return View("_Paid", db.Paid);
}
public ActionResult Products()
{
return View("_Products", db.Products);
}
确保每个视图都需要强类型模型。这样可以轻松实现视图。
答案 1 :(得分:0)
虽然您的方法可行,但您对数据的控制较少或无法控制(如果您想假设加入或使用任何父数据)。在这种情况下,我所做的是创建一个ViewModel,其中包含多个对象。例如
public class InvoiceViewModel
{
public InvoiceHead Header { get;set; }
public IList<InvoiceDetail> Details { get; set; }
}
现在我可以在进入我的视图之前填充此视图模型。
public ActionResult Invoice(int id)
{
InvoiceViewModel viewModel = new InvoiceViewModel();
viewModel.Header = db.InvoiceHead.SingleOrDefault(i => i.ID == id);
if(viewModel.Header != null)
{
viewModel.Details = db.Details.Where(d => d.Inv_id == id).ToList();
}
return View(viewModel);
}
现在,我可以使用部分视图或一个整体视图为我的发票数据设计视图。
我将IEnumerable或IList作为模型
如果我同时使用partial,它将是 @model db.Objects.InvoiceHead //用于标题
@model IEnumerable //了解详情
答案 2 :(得分:0)
将是那样的
@Html.Partial("~/Views/Customers/_AttachFileList.cshtml")
使用您自己的文件夹路径。希望工作