C# MVC 5局部视图-模型混淆
我有一个叫Slider的模型C# MVC 5局部视图-模型混淆,c#,asp.net-mvc,partial-views,C#,Asp.net Mvc,Partial Views,我有一个叫Slider的模型 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; } pub
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));
}
}
}
在SliderController中,我无法将var模型传递给局部视图,因为我得到的是Iqueryable、ienumerable或沿以下行的错误
模型列表。滑块不可分配给类型模型。滑块
非常感谢
Simon如果滑块与父模型无关,则可能需要使用子动作 您的控制器将执行如下操作:
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语句。您正试图将列表分配给模型,但您声明了一个非列表类型的模型,因此您要么希望将其声明为列表类型,要么从结果中选择firstordefault
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;
}
所以,没有viewmodel,但是我的模型应该是某种模型吗?没有。像那样调用Html.Action最多需要一些参数。它不像Html.Partial,它使用模型。所以我只是想知道我的-它指的是什么?谢谢Simony你要采取行动了。第一个参数是动作,第二个是控制器。示例代码使用MyController,所以第二个参数是my.Ahhh,我不知道它是否是cpoy和粘贴输入错误或其他什么。谢谢你的澄清。返回PartialView_HomeSlider,model;他仍然在告诉我;列表不可分配给类型Models.slider当您在视图中使用相同的列表时。你能把你的部分视图全部代码添加到我原来的帖子里吗。我想我只遗漏了一件小事——我只是不知道我错在哪里。更新了答案,请检查我!我忘了将我的新映射添加到我的nHibernate.Configure方法!!!哈哈
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;
}