我有一个包含3个部分视图的页面。
...
.
.
@Html.Action("one" , "Home")
@Html.Action("two" , "Home")
@Html.Action("three" , "Home")
.
.
.
我在数据库中有5个表。其中一些有关系。这些表的一些字段应填入部分ONE,一些应填写部分TWO,并且... 我把这5张桌子组成了一个组合。
public class ViewModelX
{
public Nullable<long> id_sport { get; set; }
public Nullable<long> id_city { get; set; }
public Nullable<long> id_spend { get; set; }
public Nullable<long> id_profile { get; set; }
public Nullable<int> cost { get; set; }
public Nullable<long> idFactor { get; set; }
public Nullable<long> Idpage { get; set; }
public string username { get; set; }
public string Namestar { get; set; }
public string Lnamestar { get; set; }
public string Tell { get; set; }
public string cell { get; set; }
public string Address { get; set; }
public string Code { get; set; }
public string username_s { get; set; }
public Nullable<long> id_s { get; set; }
public Nullable<long> id_mark{ get; set; }
}
现在我应该将这个模型传递给每个部分? 我应该将它传递给包含这3个部分视图的基本页面吗?
答案 0 :(得分:2)
您不应将模型(与您的业务层相关联)传递给您查看。
您的意见可能仅仅来自于编写/维护较少代码的愿望。因此,很明显为什么要创建所有的新视图模型 时间会导致更多的代码。
在有意义的情况下使用视图模型的原因(这种情况发生在我身上),这可以让您验证视图模型 与基于属性的验证方案的模型不同。
查看模型对象可用于帮助整形和格式化数据。需要以特定方式格式化日期或金钱值吗?你可以做到这一点 视图,控制器或视图模型中的视图。如果你只是 做的是格式化等,你可以做一个视图模型的情况 是最好的去处。
- 醇>
通过使用视图模型,您可以使用一种很好的机制来展平并简化视图处理的内容。这也将过滤掉可以做的事情 在intellisense中可以看到,所以如果你有不同的人在发展 模型比那些在视图上工作的模型,创建一个简单的视图 模型可以让那些刚刚处理UI的人更容易。
Conslusion :视图模型应该只包含相应视图所需的属性。
查看模型
public class PartialViewModel1
{
[Display(Name = "Name")]
public String Name { get; set; }
}
public class PartialViewModel2
{
[Display(Name = "id")]
public int id { get; set; }
}
public class PartialViewModel3
{
[Display(Name = "DOB")]
public DateTime DOB { get; set; }
}
控制器操作方法
[HttpGet]
public PartialViewResult PartialView1()
{
return PartialView(new PartialViewModel1());
}
[HttpGet]
public PartialViewResult PartialView2()
{
return PartialView(new PartialViewModel2());
}
[HttpGet]
public PartialViewResult PartialView3()
{
return PartialView(new PartialViewModel3());
}
部分观点 - 1
@model Practise.Controllers.PartialViewModel1
@using (Html.BeginForm("Action", "Controller", FormMethod.Post))
{
@Html.EditorForModel();
<input type="submit" name="Submit" value="Submit" />
}
部分观点 - 2
@model Practise.Controllers.PartialViewModel2
@using (Html.BeginForm("Action", "Controller", FormMethod.Post))
{
@Html.EditorForModel();
<input type="submit" name="Submit" value="Submit" />
}
部分观点 - 3
@model Practise.Controllers.PartialViewModel3
@using (Html.BeginForm("Action", "Controller", FormMethod.Post))
{
@Html.EditorForModel();
<input type="submit" name="Submit" value="Submit" />
}
查看强>
@Html.Action("PartialView1", "Account", new { area = "AreaName" })
@Html.Action("PartialView2", "Account", new { area = "AreaName" })
@Html.Action("PartialView3", "Account", new { area = "AreaName" })
答案 1 :(得分:0)
我以前遇到过你的问题。 如果您的部分视图应该使用@ Html.RenderAction()获得一些数据,如下所示:
您的部分视图( _theLastPost.cshtml ):
@model IEnumerable<test1.Models.Post>
@foreach (var item in Model)
{
<h2>
@item.Title
</h2>
<p>
@item.Content
</p>
}
在 Index.cshtml 嵌入局部视图中
@{ Html.RenderAction("_theLastPost"); }
你应该有一个控制器,其名称与部分视图相同,如下所示:
public PartialViewResult _theLastPost()
{
var a = (from c in db.Posts
orderby c.ID_Post descending
select c);
return PartialView(a.ToList());
}