[英]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.