Nat*_*ing 6 c# asp.net-mvc asp.net-mvc-3
ASP.NET MVC的新手(现在使用带Razor的MVC3),我很困惑将一个对象从Controller传递给View.具体来说,我正在试验MVC3和Rob Conery有趣的Massive(http://blog.wekeroad.com/helpy-stuff/and-i-shall-call-it-massive).我正在搞一个博客作为一个简单的Web应用程序来试验.
HomeController.cs:
public ActionResult Index()
{
var table = new DynamicModel("mydb", tableName: "Posts");
//grab all the posts
var posts = table.All();
ViewData["Posts"] = posts;
return View();
}
Run Code Online (Sandbox Code Playgroud)
这部分效果很好.但是我该怎么做?
return View(posts);
Run Code Online (Sandbox Code Playgroud)
如果我@posts.PostID在视图中引用,它会出错并说它无效.所以我尝试针对DynamicModel创建强类型视图,但posts仍然不存在.
我知道我可以创建一个ViewModel并针对该类型键入视图并将数据插入其中.这更多是关于理解Controller/View如何交互.
谢谢!
Geo*_*atz 10
首先,您需要创建一个类.例如:
public class Post : DynamicModel
{
public Post(): base("db")
{
PrimaryKeyField = "PostID";
}
}
Run Code Online (Sandbox Code Playgroud)
在Controller中,您可以:
public ActionResult Index()
{
var table = new Post();
var posts = table.All();
return View(posts);
}
Run Code Online (Sandbox Code Playgroud)
因此,您可以创建一个强类型视图,并将视图模型设置为IEnumerable.视图将如下所示:
@model IEnumerable<dynamic>
<h2>Index</h2>
<ul>
@foreach (var item in Model)
{
<li>@item.PostID</li>
}
</ul>
Run Code Online (Sandbox Code Playgroud)
ASP NET MVC 模板是解决方案。
首先,ViewData不鼓励使用,尤其是在 MVC 2.0 和 3.0 中,其中有许多更好的方法将状态传递给视图。
强类型视图是正确的选择。但是如果你有一个收藏要传递怎么办?那么,您仍然可以为集合(或通用列表)创建强类型视图,但标准解决方案是为项目而不是集合使用 ASP NET MVC 模板(即 ascx 文件),并在父视图上调用 RenderPartial:
例如:
<div>
<% for (int i = 0; i < Model.Bars.Count; i++)
{%>
<h3>
<a href="#">Bar
<%: String.Format("{0:g}", Model.Bars[i].DocumentDate.ToShortDateString())%></a></h3>
<div>
<%: Html.DisplayFor(m => m.Bars[i].Content)%>
</div>
<%}%>
</div>
Run Code Online (Sandbox Code Playgroud)
这里有一个关于这个主题的非常好的系列。
| 归档时间: |
|
| 查看次数: |
5786 次 |
| 最近记录: |