如何在ASP.NET MVC中创建填充集合并返回部分视图的服务器方法?

时间:2017-10-13 18:07:50

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor

我正在尝试在 _Layout.cshtml 文件中调用IEnumerable方法。在决赛中,我被建议使用html.action - 来调用填充集合并返回部分视图的服务器方法"。

目前我创建了部分文件 _Dodatki.cshtml ,其中包含IEnumerable方法的调用( Aktualnosci.cs 是模型文件):

@model IEnumerable<DluzynaSzkola.Models.Aktualnosci>

在我的 _Layout.cshtml 中,我从构造函数调用了方法:

@Html.Action("_Dodatki", "AktualnosciController ", new {area="" })

在决赛中我想在我的 AktualnosciConstructor.cs 文件中创建方法。 Currenly我有方法:

[ChildActionOnly]
[ActionName("_Dodatki")]
public ActionResult Dodatki()
{
    IList<Aktualnosci> lista = new IList<Aktualnosci>();
    return PartialView("_Dodatki", lista);
}

不幸的是,当使用上面的语法时,它在编译器中给出了消息:

  

&#34;无法创建抽象类或接口的实例   &#39;的IList&#39;&#34;

更换&#39; IList&#39;使用&#39; List&#39;,它给了我例外:

  

&#34; System.Web.HttpException:路径控制器&#39; /&#39;没找到   或者没有实现IController。&#34;

我不知道如何以其他方式填充方法中的集合。

编辑:根据请求,在 AktualnosciController.cs 定义下面,没有其他方法:

namespace DluzynaSzkola.Controllers
{
    public class AktualnosciController : Controller
    {
        //here are other methods

        [ChildActionOnly]
        [ActionName("_Dodatki")]
        public ActionResult Dodatki()
        {
            IList<Aktualnosci> lista = new IList<Aktualnosci>();
            return PartialView("_Dodatki", lista);
        }
    }
}

2 个答案:

答案 0 :(得分:0)

注意GTown-Coder您的控制器名称似乎错了。相应地更新了我的答案。

我认为您的问题可能与this SO post所回答的问题相同。

尝试指定区域名称,如果此控制器不在区域中,则只需添加空区域名称。

@Html.Action("_Dodatki", "AktualnosciController ", new {area="" })

即使这不能解决您的问题,这也是一种很好的做法,因为如果该视图后来在一个区域中使用,它将尝试在该区域中找到控制器,而不是在根空间中。

答案 1 :(得分:0)

好吧,我已经对我的项目实施了更改,这很好。

我的 _Layout.cshtml 电话有点改变了。 AktualnosciController 应该被称为 Aktualnosci !!!

<div class="kontenerDodatkiLayout hidden-xs hidden-sm">
                <div class="archiwum">Archiwum</div>
                @Html.Action("_Dodatki", "Aktualnosci", new { area = "" })
            </div>

我的部分视图 _Dodatki.cshtml 模型调用有点改变:

@model IEnumerable<DateTime>

<div class="wpisDodatki">
    @foreach (var item in Model)
    {
        <div> @Html.DisplayFor(modelItem => item)</div>
    }
    <p>test<br />test<br />test</p>
</div>

我的控制器中的方法 AktualnosciController.cs 看起来像这样:

//[ChildActionOnly]
        [ActionName("_Dodatki")]
        public ActionResult Dodatki()
        {
            using (var context = new DluzynaContext())
            {
                var lista = context.Indeks.Select(it => it.Dzien).ToList();

                return PartialView("_Dodatki", lista);
            }
        }

在这里lista被传递到我的部分视图 _Dodatki ,并且它填充了上下文属性 Indeks 和模型属性 Dzien

谢谢你们的帮助@Wndrr,@ GTown-Coder。