繁体   English   中英

MVC 5部分视图-模型混乱

[英]MVC 5 Partial View - Model confusion

我有一个叫做“滑块”的模型

using System;
using NHibernate.Mapping.ByCode;
using NHibernate.Mapping.ByCode.Conformist;

namespace BarMotors.Models
{
public class Slider
{
    public virtual int Id { get; set; }
    public virtual string Photo{ get; set; }
    public virtual string LeftText{ get; set; }
    public virtual string RightText { get; set; }
    public virtual int SortOrder{ get; set; }
    public virtual DateTime CreatedAt { get; set; }
    public virtual DateTime? UpdatedAt { get; set; }
    public virtual DateTime? DeletedAt { get; set; }

    public virtual bool IsDeleted
    {
        get { return DeletedAt != null; }
    }
}

public class SliderMap : ClassMapping<Slider>
{
    public SliderMap()
    {
        Table("Sliders");
        Id(x => x.Id, x => x.Generator(Generators.Identity));
        Property(x => x.Photo, x => x.NotNullable(true));
        Property(x => x.LeftText);
        Property(x => x.RightText);
        Property(x => x.SortOrder, x => x.NotNullable(true));
    }
}
}

我(现在)也有这个控制器;

using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using BarMotors.Models;
using NHibernate.Linq;

namespace BarMotors.Controllers
{
    public class SliderController : Controller
    {
        [ChildActionOnly]
        public ActionResult Sliders()
        {
            List<Slider> model;
            new List<Models.Slider>();
            model = Database.Session.Query<Slider>().Where(s => s.DeletedAt == null).OrderBy(x=>x.SortOrder).ToList();

            return PartialView("_HomeSlider", model);
        }
    }
}

主视图

@{
    ViewBag.Title = "Homepage";
}
<h1>Homepage</h1>
@Html.Action("Sliders", "Slider")

部分视图

@model BarMotors.Models.Slider

@{
    Layout = null;
}
//do something in loop of Slider

在SliderController中,我无法将var模型传递给局部视图,或者无法获得Iqueryable,ienumerable或错误;

Models.Slider的列表不可分配给类型模型。

非常感谢西蒙

如果滑块与父模型无关,则可能要使用子动作。

您的控制器将执行以下操作:

public class MyController : Controller
{
    /* ... your code ... */

    [ChildActionOnly]
    public ActionResult Sliders()
    {
        var model = new Models.Slider();

        /* ... populate model ... */

        return PartialView("your-view-name", model);
    }
}

您可以使用HtmlHelper.Action()方法从父视图中请求子操作:

<div>
    <!-- more view markup ... -->

    @Html.Action("sliders", "my")

</div>

当您以这种方式调用Html.Action方法时,结果视图(通常是部分视图)将在当前视图中就地呈现。 如果您熟悉PHP,它有点类似于include语句。

您正在尝试将列表分配给模型,但是您声明的模型不是列表类型,因此您想将其声明为列表类型,或者从结果中选择first或default

public class MyController : Controller
{
    /* ... your code ... */

    [ChildActionOnly]
    public ActionResult Sliders()
    {
        var model = new Models.Slider();

        model = Database.Session.Query<Slider>().Where(s => s.DeletedAt == null).OrderBy(x=>x.SortOrder).ToList().FirstOrDefault();

        return PartialView("your-view-name", model);
    }
}

除此以外

public class MyController : Controller
{
    /* ... your code ... */

    [ChildActionOnly]
    public ActionResult Sliders()
    {
        var model = new List<Models.Slider>();

        model = Database.Session.Query<Slider>().Where(s => s.DeletedAt == null).OrderBy(x=>x.SortOrder).ToList();

        return PartialView("your-view-name", model);
    }
}

在局部视图中,您必须将其更改为

@model List<BarMotors.Models.Slider>

@{
    Layout = null;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM