表结构假设如下
表tblnav
id,name,url,pid
表tblmsg
id,title,msg
两张表各有一个model实体类
现在在同一页面 左边形成菜单导航 假设只为最简单的2层就行了
右边为消息列表
如下
a
<ul>
<li>a-1</li>
<li>a-2</li>
</ul>
b
<ul>
<li>b-1</li>
<li>b-2</li>
</ul>
表tblmsg
只要形成列表视图
<ul>
<li>id , title, msg</li>
<li>id , title, msg</li>
<li>id , title, msg</li>
</ul>
最好能有个例子
我的想法是 写个综合的实体类
public class Nav { public int id {get;set;} public string name {get;set;} public string url {get;set;} public int pid{get;set;}//父节点id } public class Msg { public int id {get;set;} public string title{get;set;} public string msg{get;set;} } public class Navmsg { public Nav navmodel {get;set;} public List<Nav> navmodellsit {get;set;} public List<Msg> msgmodellsit {get;set;} }
这样写好像有问题
pid为父节点id
其实就是形成一个2层的导航
外加很多表的列表信息
假如有2层以上递归要如何写
最好有代码参考
初学mvc难一些的东西 都没法找到资料
你的这个需求应该就是把数据取到视图后,根据pid循环递归把数据按层级呈现出来就行了。好比一个无限级菜单。是这样的吧?你一说视图把大伙都给误导了。
对 就是左边是导航菜单 右边是消息列表 大概就是这样
@暗尘掩月:
你左边的导航菜单如果是静态内容的话。可以用
@Html.Partial("_菜单视图")
如果是动态的话
@Html.Action("菜单Action", "home")
左边导航菜单,右边消息列表。你看着是关联的,其实程序处理的时候就是两回事。右边消息列表该显示那个导航项下的内容在于你传递的参数。
然后放同一个页面。你该不会是不太清楚怎么传递多个数据实体到视图吧。除了return View(model);传递一个之外。需要传递其它多个对象的话,可以用viewbag,viewdata....具体用法很简单。你在博客园搜索下。或者封装一个对象集合。建议还是viewbag,viewdata。更容易上手。
你去我博客把我做的程序源码下来看看。不明白的话再问我。
@YQ君: 对就是不太清楚怎么传递多个数据实体到视图
假设
List<Model.Msg> = bllmsg.getMsgList();
viewdata["msg"] = bllmsg;
这样返回的话在试图中要怎么循环
@暗尘掩月: 封装一个对象集合 这个又要怎么写
@暗尘掩月:
@foreach (var item in viewdata["msg"] as IEnumerable<命名空间.Model.Msg>)
{
。。。。。。。
}
@暗尘掩月:
其中一种方法。
在控制器里定义一个Dictionary 泛型类,再把要用到的不同模型加进去。
控制器:
public ActionResult Index()
{
IDictionary<string, object> test = new Dictionary<string, object>();
test.Add("StudentList", new List<StudentInfo>());
return View(test);
}
视图:
@model IDictionary<string, object>
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<title>我的个人主页</title>
</head>
<body>
<ul style="list-style: none; margin-left: 10px;">
@foreach (var m in (IList<EnglishDiary.Models.StudentInfo>)Model["StudentList"])
{
<li>@m.StuID</li>
<li>@m.StuName</li>
}
</ul>
</body>
</html>
@YQ君: public ActionResult Index()
{
IDictionary<string, object> test = new Dictionary<string, object>();
test.Add("StudentList", new List<StudentInfo>());
return View(test);
}
假设是用这个方法 那嵌套循环的实体要怎么放进去
@暗尘掩月:
List<Model.Msg> bllmsg= bllmsg.getMsgList();
//viewdata["msg"] = bllmsg;
test.Add("msg", bllmsg);
@YQ君: 消息列表通过viewData已经实现了 谢谢
动态的菜单 假设2层 @Html.Action("菜单Action", "home")
这个控制器里面要怎么写
@暗尘掩月:
这个其实你也不需要什么分部视图之类的了。
还是在你的视图写一个循环递归的显示逻辑就好了。这样做其实还是比较麻烦。我建议你在后台如果能够通过排序的方式把层级体现出来,然后视图还是就一个循环显示。那样会更好。
表述有点凌乱,能否说清楚些?
-----------关于表1的分界线--------------------------
假设表1中的pid为parentid...如果假设错误就不用往下看了...
两种方法解决这个问题:
1. 写个html helper extension,递归render你想要的html格式+数据
2. 递归partialView,例如:建一个"table1PartialView",在里面写:Html.RenderPartial("table1PartialView",data.Items)
-----------关于表2的分界线--------------------------
建个partialView即可,不明白要问啥。。。
pid就是parentid父节点id
有没有代码可以参考啊 初学mvc 网上的资料好少 稍微难一点的东西 都找不到资料
class Table1
{
int id;
string name;
string url;
IEnumerable<Table1> Children;
}
------------helper---------------------
public static string Table1Tree(this HtmlHelper html, IEnumerable<Table1> Table1s)
{
string htmlOutput = string.Empty;
if (Table1s.Count() > 0)
{
htmlOutput += "<ul>";
foreach (Table1 table1 in Table1s)
{
htmlOutput += "<li>"
htmlOutput += table1.Name;
htmlOutput += html.Table1Tree(table1.Children);
htmlOutput += "</li>"
}
htmlOutput += "</ul>";
}
return htmlOutput;
}
@Joe Hou: 还有其他的表的列表循环怎么同时放进去
@暗尘掩月: 假设你已经会用mvc3的partialView显示表2...如果不会...就不用看上面的了,先看:http://rachelappel.com/razor/partial-views-in-asp-net-mvc-3-w-the-razor-view-engine/
@Joe Hou: 没有看懂
@暗尘掩月: 没有看懂。。。
看过MVC3的tutorial以及跟着练过吗?没有的话,一步步跟着练吧
http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/intro-to-aspnet-mvc-3
单独的嵌套循环 形成2及菜单
单独的新列表这个都会做
关键是这两个要放在同一个页面 就不会弄了