【问题标题】:Partial View and Model not working部分视图和模型不起作用
【发布时间】:2012-10-31 14:09:23
【问题描述】:

我正在使用 Razor 视图在 MVC 3 中工作。我创建了一个调用局部视图的页面

@Html.Partial("_FeaturedRatesBox")

看起来像这样:

@model IEnumerable<AppleWeb.Models.RateViewer>

<div class="col">
<h3>Today's Featured Rates</h3>
<form method="post" action="">
  <div class="tabber">
    <ul class="tabs unstyled">
      <li class="selected"><a href="#tab1">Loans</a></li>
      <li><a href="#tab2">Deposits</a></li>
    </ul>
    <div class="tab" id="tab1">
    @foreach (var item in Model)
    {
        <div class="rate"> <span class="left">@item.AccountName <br />
        </span> <span class="right"> As low as <span class="percent">@item.Rate</span></span></div>
        <!-- end of rate -->
    }
    </div>
    <!-- end of tab -->
    <div class="tab" id="tab2"> Loremipsum
    </div>
    <!-- end of tab -->
    <button type="submit" class="btn alignright">Apply Now</button>
  </div>
  <!-- end of tabber -->
</form>
</div>

rateviewer.cs 模型如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.EntityModel;
using AppleWeb.Models;

namespace AppleWeb.Models
{
    public class RateViewer
    {
        private PublicWebEntities pubDB = new PublicWebEntities();
        public virtual IEnumerable<DepositRate> FeaturedRatesDeposit()
        {
            var data = from item in pubDB.DepositRates
                       where item.Featured.Equals(true)
                       select item;
            return data.ToList();
        }
    }
}

它在调用局部视图的行上出错并说

CS1061:“AppleWeb.Models.RateViewer”不包含“AccountName”的定义,并且找不到接受“AppleWeb.Models.RateViewer”类型的第一个参数的扩展方法“AccountName”(您是否缺少使用指令或程序集

AccountName 和 Rate 都是 DepositRates 实体对象的实体名称。从 DataModel.Designer 文件中:

public static DepositRate CreateDepositRate(global::System.Int32 rateID, global::System.String accountName, global::System.Double rate, global::System.Double aPY, global::System.Int16 sortingOrder)
{
    DepositRate depositRate = new DepositRate();
    depositRate.RateID = rateID;
    depositRate.AccountName = accountName;
    depositRate.Rate = rate;
    depositRate.APY = aPY;
    depositRate.SortingOrder = sortingOrder;
    return depositRate;
}

我希望这样工作,因为这样我就可以在网站的其他地方使用这个模型。

【问题讨论】:

  • 你想在foreach循环中显示什么?您的模型是RateViewer 对象的集合,而RateViewer 没有AccountName 属性。如果确实打算将RateViewer 对象的集合 作为局部视图的模型,则需要嵌套foreach 循环(循环通过item.FeaturedRatesDeposit)。否则,将模型更改为RateViewer 并按照@Andreas 在答案中的建议进行。

标签: c# .net asp.net-mvc-3


【解决方案1】:

您需要在模型上迭代 IEnumerable 属性,即。 @foreach (var item in Model.FeaturedRatesDeposit)

【讨论】:

  • 您可能走在正确的轨道上,但看起来局部视图的模型应该是 RateViewer 类型,而不是 IEnumerable&lt;RateViewer&gt;
  • Yakimych 当然是对的。视图需要使用单个 rateViewer 作为模型或进行嵌套 @foreach (var rateDeposit in item.FeaturedRatesDeposit()) 迭代
  • 将 foreach 更改为 FeaturedRatesDeposit 让我 Foreach 无法对“方法组”进行操作。您是否打算调用“方法组”?
  • @techmaniac - 您应该在FeaturedRatesDeposit 之后添加(),因为您正在调用该方法。
  • 所以它是上面列出的更改的组合(调用 FeaturedDeposits(),从部分使用语句中删除 IEnumerable)ANNNNNNNND 将 RateViewer 代码更改为 var data = pubDB.DepositRates.Where(i= >i.Featured==true);
【解决方案2】:

您需要将一个 AppleWeb.Models.RateViewer 类型的 IEnumerable 对象传递给视图,

所以代码应该是这样的:

@Html.Partial("_FeaturedRatesBox", new List<AppleWeb.Models.RateViewer>())

"new List<AppleWeb.Models.RateViewer>()" can be replaced with the actual instance of the collection you want to pass to the view.

此外,“RateViewer”类型不包含任何名为“AccountName”的字段。

【讨论】:

  • 这是为了实际将模型传递给视图,但问题中提到的编译器错误来自于 RateViewer 类型没有 AccountName 属性的事实。因此,实际上将视图传递给 RateViewer 或 IEnumerable(这是预期的模型类型)不会修复编译器错误。
  • @AndreasSabroeJydebjerg:你是对的。我已经编辑了答案以反映这一点。
猜你喜欢
  • 1970-01-01
  • 2020-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-17
  • 2012-11-08
  • 1970-01-01
相关资源
最近更新 更多