【问题标题】:Showing multiple tables with partial views. Asp.Net Mvc显示带有部分视图的多个表。 ASP.NET MVC
【发布时间】: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 =&gt; ...&lt;td&gt;@Html.DisplayFor(modelItem =&gt; clients.Name)&lt;/td&gt;更改为&lt;td&gt;@Html.DisplayFor(m =&gt; m.Name)&lt;/td&gt;
  • 现在它运行了,但在我搜索之前它会显示所有客户端。有客户的桌子会很大,这样才有用。

标签: c# asp.net-mvc model partial-views


【解决方案1】:

尝试: 在 viewData 上设置对象

内部控制器:

    ActionResult SomeView(){

     ViewData["object"] = theObj;
     return View();

    }

在cshtml里面:

@using objectNamespace

@(((objectType)ViewData["object"]).name)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-15
    • 2012-06-22
    • 2015-09-08
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    相关资源
    最近更新 更多