首页 新闻 搜索 专区 学院

mvc3 如何 嵌套循序 页面返回多模型视图

0
悬赏园豆:60 [已解决问题] 解决于 2012-07-11 16:10

表结构假设如下

表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难一些的东西 都没法找到资料

暗尘掩月的主页 暗尘掩月 | 初学一级 | 园豆:183
提问于:2012-07-10 21:24
< >
分享
最佳答案
0

你的这个需求应该就是把数据取到视图后,根据pid循环递归把数据按层级呈现出来就行了。好比一个无限级菜单。是这样的吧?你一说视图把大伙都给误导了。

收获园豆:60
owsir | 菜鸟二级 |园豆:481 | 2012-07-11 12:06

对 就是左边是导航菜单  右边是消息列表  大概就是这样

暗尘掩月 | 园豆:183 (初学一级) | 2012-07-11 13:32

@暗尘掩月:

你左边的导航菜单如果是静态内容的话。可以用

@Html.Partial("_菜单视图")

如果是动态的话

@Html.Action("菜单Action", "home")

 

左边导航菜单,右边消息列表。你看着是关联的,其实程序处理的时候就是两回事。右边消息列表该显示那个导航项下的内容在于你传递的参数。

 

然后放同一个页面。你该不会是不太清楚怎么传递多个数据实体到视图吧。除了return View(model);传递一个之外。需要传递其它多个对象的话,可以用viewbag,viewdata....具体用法很简单。你在博客园搜索下。或者封装一个对象集合。建议还是viewbag,viewdata。更容易上手。

 

你去我博客把我做的程序源码下来看看。不明白的话再问我。

owsir | 园豆:481 (菜鸟二级) | 2012-07-11 14:34

@YQ君: 对就是不太清楚怎么传递多个数据实体到视图

假设

List<Model.Msg> = bllmsg.getMsgList();

viewdata["msg"] = bllmsg;

这样返回的话在试图中要怎么循环

暗尘掩月 | 园豆:183 (初学一级) | 2012-07-11 14:57

@暗尘掩月: 封装一个对象集合  这个又要怎么写

暗尘掩月 | 园豆:183 (初学一级) | 2012-07-11 15:03

@暗尘掩月: 

    @foreach (var item in viewdata["msg"] as IEnumerable<命名空间.Model.Msg>)
    {

。。。。。。。

}

owsir | 园豆:481 (菜鸟二级) | 2012-07-11 15:04

@暗尘掩月: 

其中一种方法。
在控制器里定义一个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>


 

owsir | 园豆:481 (菜鸟二级) | 2012-07-11 15:06

@YQ君: public ActionResult Index()
        {
            IDictionary<string, object> test = new Dictionary<string, object>();

            test.Add("StudentList", new List<StudentInfo>());           

            return View(test);
        }

假设是用这个方法 那嵌套循环的实体要怎么放进去

暗尘掩月 | 园豆:183 (初学一级) | 2012-07-11 15:11

@暗尘掩月:

List<Model.Msg> bllmsg= bllmsg.getMsgList();

//viewdata["msg"] = bllmsg;

test.Add("msg", bllmsg);  

owsir | 园豆:481 (菜鸟二级) | 2012-07-11 15:14

@YQ君: 消息列表通过viewData已经实现了   谢谢

动态的菜单 假设2层 @Html.Action("菜单Action", "home")

这个控制器里面要怎么写

暗尘掩月 | 园豆:183 (初学一级) | 2012-07-11 15:22

@暗尘掩月: 

这个其实你也不需要什么分部视图之类的了。

还是在你的视图写一个循环递归的显示逻辑就好了。这样做其实还是比较麻烦。我建议你在后台如果能够通过排序的方式把层级体现出来,然后视图还是就一个循环显示。那样会更好。

owsir | 园豆:481 (菜鸟二级) | 2012-07-11 15:40
其他回答(2)
0

表述有点凌乱,能否说清楚些?

artwl | 园豆:16536 (专家六级) | 2012-07-10 21:47
0

-----------关于表1的分界线--------------------------

假设表1中的pid为parentid...如果假设错误就不用往下看了...

两种方法解决这个问题:

1. 写个html helper extension,递归render你想要的html格式+数据

2. 递归partialView,例如:建一个"table1PartialView",在里面写:Html.RenderPartial("table1PartialView",data.Items)

-----------关于表2的分界线--------------------------

建个partialView即可,不明白要问啥。。。

Joe Hou | 园豆:265 (菜鸟二级) | 2012-07-11 09:44

pid就是parentid父节点id

有没有代码可以参考啊  初学mvc 网上的资料好少  稍微难一点的东西 都找不到资料

支持(0) 反对(0) 暗尘掩月 | 园豆:183 (初学一级) | 2012-07-11 10:04

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;
}

支持(0) 反对(0) Joe Hou | 园豆:265 (菜鸟二级) | 2012-07-11 11:13

@Joe Hou: 还有其他的表的列表循环怎么同时放进去

支持(0) 反对(0) 暗尘掩月 | 园豆:183 (初学一级) | 2012-07-11 11:21

@暗尘掩月: 假设你已经会用mvc3的partialView显示表2...如果不会...就不用看上面的了,先看:http://rachelappel.com/razor/partial-views-in-asp-net-mvc-3-w-the-razor-view-engine/

支持(0) 反对(0) Joe Hou | 园豆:265 (菜鸟二级) | 2012-07-11 11:22

@Joe Hou: 没有看懂 

支持(0) 反对(0) 暗尘掩月 | 园豆:183 (初学一级) | 2012-07-11 11:36

@暗尘掩月: 没有看懂。。。

支持(0) 反对(0) Joe Hou | 园豆:265 (菜鸟二级) | 2012-07-11 11:45

看过MVC3的tutorial以及跟着练过吗?没有的话,一步步跟着练吧

http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/intro-to-aspnet-mvc-3

支持(0) 反对(0) Joe Hou | 园豆:265 (菜鸟二级) | 2012-07-11 11:48

单独的嵌套循环   形成2及菜单  

单独的新列表这个都会做 

关键是这两个要放在同一个页面 就不会弄了

支持(0) 反对(0) 暗尘掩月 | 园豆:183 (初学一级) | 2012-07-11 13:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册