【发布时间】:2019-08-09 07:31:19
【问题描述】:
我想使用 3 个局部视图在 3 个不同的表中显示我的搜索结果(客户名称)。在搜索完成之前,我不想显示表格中的任何信息。据我了解,每个视图只能使用一个模型,除非您采取一些变通方法。
我尝试制作一个视图模型,以便我可以从索引和部分视图中引用多个表。但是想不通。由于 3 个不同表的方法几乎相同,因此我只发布客户端表的代码。任何帮助或指示将不胜感激
视图模型:
public class ViewModel
{
public List<Clients> allClients { get; set; }
public List<OrderLines> allOrders { get; set; }
public List<ViewNewOrderSum> allViewNewOrderSum { get; set; }
}
家庭控制器:
using testForAutofill.Models;
public class HomeController : Controller
{
test_Db_Context db = new test_Db_Context();
// GET: Home
public ActionResult Index()
{
ViewModel vm = new ViewModel();
vm.allClients = GetClients();
return View();
}
private List<Clients> GetClients()
{
List<Clients> clientList = new List<Clients>();
clientList = db.Clients.ToList();
return clientList;
}
[HttpPost]
public ActionResult Index(string searchTerm)
{
Scaleit_Db_Context db = new Scaleit_Db_Context();
List<Clients> orderSums;
if (string.IsNullOrEmpty(searchTerm))//Fix this!
{
orderSums = db.Clients.ToList();
}
else
{
orderSums = db.Clients.Where(x => x.Name.Equals(searchTerm)).ToList();
}
return View(orderSums);
}
索引视图:
@using testForAutofill.Models;
@model testForAutofill.Models.ViewModel
@if (Model.allClients != null && Model.allClients.Count() > 0)
{
@using (Html.BeginForm())
{
<b>Kundenavn:</b>
@Html.TextBox("searchTerm", null, new { id = "txtSearch" })
<input type="submit" value="???? Search" class="btn btn-primary" id="btn-search" />
@using (Html.BeginForm())
{
<div class="card-container">
<div class="card border-primary mb-3 card-client" style="max-width: 40rem;">
<div class="card-header">Kunde</div>
<div class="card-body">
<table class="table table-hover">
@foreach (Clients clients in Model.allClients)
{
@Html.Partial("_Client", clients)
}
</table>
</div>
</div>
</div>
}
_客户:
@model testForAutofill.Models.ViewModel
//Tried both DisplayFor and not.
<tr>
<th>Kunde:</th>
<td>@Html.Model.allClients.Name</td>// This is where the error gets
// thrown.
</tr>
<tr>
<th>Org.nr:</th>
<td>@Html.DisplayFor(modelItem => clients.OrgNr)</td>
</tr>
<tr>
<th>Adresse:</th>
<td>@Html.DisplayFor(modelItem => clients.Address1)</td>
@if (clients.Address2 != null)
{
<td>@Html.DisplayFor(modelItem => clients.PostNr)</td>
}
</tr>
程序/网页不运行,我收到错误消息:
" CS1061: 'HtmlHelper' 不包含对 'Model' 并且没有扩展方法 'Model' 接受第一个参数 可以找到类型“HtmlHelper”(您是否缺少使用 指令还是程序集引用?)”。
在部分视图中的注释行。
【问题讨论】:
-
尝试“@Model.allClients.Name”而不是“@Html.Model.allClients.Name”
-
这在 Name 下给了我一条红线:“Cannot convert method group 'Name' to non-delegate type 'Object' 你打算调用该方法吗?”
-
是的,因为 allClients 是一个列表,上面没有 Name。当您渲染部分
@Html.Partial("_Client", clients)时,您正在将“客户端”对象传递给部分。如果这是您的意图,那么 _Clients 部分应该具有模型@model testForAutofill.Models.Clients(也许更好的名称是 Client)。然后它上面会有@Model.Name。这是你的意图吗? -
那么你还需要将所有
@Html.DisplayFor(modelItem => ...的<td>@Html.DisplayFor(modelItem => clients.Name)</td>更改为<td>@Html.DisplayFor(m => m.Name)</td> -
现在它运行了,但在我搜索之前它会显示所有客户端。有客户的桌子会很大,这样才有用。
标签: c# asp.net-mvc model partial-views