首页 新闻 会员 周边

ASP.NET MVC新手求教.如何多个cshtml使用同一个ActionResult提供数据?

0
悬赏园豆:200 [已解决问题] 解决于 2015-06-03 18:14

就是类似asp.net webform中的用户自定义空间ascx

在webform中创建一个ascx控件,会有后台方法提供数据。那么网站上线后我复制几个ascx都能正常调用,

<%@ Register TagPrefix="Gp" TagName="Header" Src="Control/Top.ascx" %> 
<%@ Register TagPrefix="Gp" TagName="Header" Src="Control/Top1.ascx" %> 
<%@ Register TagPrefix="Gp" TagName="Header" Src="Control/Top2.ascx" %>  

 

这3个ascx其实用的都是一个后台UserControl 方法也就是 Inherits 一样。

这样我可以在不同的页面调用不同的ascx,ascx中也可以自由的更换DIV样式.

 

MVC如何做到这一点呢?

 我现在只能用笨方法。  后台

public class TestData
    {
        public static List<string> Test()
        {
            List<string> a=new List<string>{"a","b","c","1","2","3"};
            return a;
        }
    }

cshtml中用

@foreach (var t in TestData.Test())
 {
     @t
     <br>
 }

来进行多个cshtml使用同一数据源..不知道MVC中有没有类似webform中使用ascx的方法?

分部视图好像 一个ActionResult只能对应一个cshtml。进行调用.

秋叶无痕的主页 秋叶无痕 | 初学一级 | 园豆:26
提问于:2013-04-02 10:33
< >
分享
最佳答案
0


首先:一个action只能返回一个view!

所以你的问题有两种解决思路:

1、从action入手,把一个action的返回结果根据条件跳转到多个action中,然后每个action在对应各自的view。

2、首页、信息页、浏览页 这些主视图中嵌入同一个分部视图,通过不同的参数返回不同的pose。

 

思路1 控制器倒是可以跳转,但是控制器中的model数据无法跟着跳转,只能再次定义,所以无法实现你的要求。

思路2 的实现方法如下:

 

test()分部控制器:

 test( string showType=“indexPage” )

viewBag.cssType=cssType;

...

test.cshtml分部视图:

if(showType=="indexPage"){ 定义该视图在首页时的一些东东 }

if(showType=="infoPage"){ 定义该视图在信息页时的一些东东 }

... ... ...

首页主视图内:

Html.RenderAction(“test”,new{showType="indexPage"})  这里调用test()在首页时应该摆的pose

信息页主视图内:

Html.RenderAction(“test”,new{showType="indexPage"})  这里调用test()在信息页时应该摆的pose

... ... ... ...

 

 

 

 

收获园豆:200
懒虫. | 菜鸟二级 |园豆:402 | 2013-07-02 13:06
其他回答(8)
1

return View("指定你的视图名称就OK了");

ChixTech | 园豆:171 (初学一级) | 2013-04-02 10:43

我上面讲了,一个分部视图只能对应一个cshtml?

但是我需要这个分部视图有多个DIV样式。

比如在首页我需要用蓝色,信息页用红色,浏览页用黄色。

我总不可能创建N个同样的视图吧?

支持(0) 反对(0) 秋叶无痕 | 园豆:26 (初学一级) | 2013-04-02 10:52
0

这么多分。。

ymecho | 园豆:202 (菜鸟二级) | 2013-04-02 10:51
0

cshtml中
@{ Html.RenderAction("action名", "控制器名");}

或者 @Html.Partial("视图名")

或者@{ Html.RenderPartial("视图名");}

Qlin | 园豆:2403 (老鸟四级) | 2013-04-02 10:55

我不是问怎么调用啊。我是问多个cshtml如何对应一个Action。就是说多个cshtml中的Model数据源一样,只是DIV样式不一样。

难道只能由主页面提供数据?

支持(0) 反对(0) 秋叶无痕 | 园豆:26 (初学一级) | 2013-04-02 11:11

@寒叶: 

局部视图啊,咋回事,不晓得 你要啥效果。

支持(0) 反对(0) Qlin | 园豆:2403 (老鸟四级) | 2013-04-02 12:09

@Qlin: 局部视图的一个Action方法只能对应一个cshtml啊? 如果我再想添加一个DIV样式,只能再创建一个Action,重新编译。。

我的意思是视图里用的数据一样。 就是div样式不同.

那能不能这样?
public ActionResult Top(string cshtmlFile)
        {
            var Model=new{dd="ss"};
            return View(cshtmlFile,Model);
        }
这种方式,视图里怎么调用呢?就是传入path变量 

支持(0) 反对(0) 秋叶无痕 | 园豆:26 (初学一级) | 2013-04-02 12:35

@寒叶: 

如果 多个 局部视图,你的方式 可以啊。

支持(0) 反对(0) Qlin | 园豆:2403 (老鸟四级) | 2013-04-02 12:44
0

对应一个Action你就调一个Action不就行了么

淘@淘 | 园豆:602 (小虾三级) | 2013-04-02 11:32

那我得创建多少个ACTION,这不科学

支持(0) 反对(0) 秋叶无痕 | 园豆:26 (初学一级) | 2013-04-02 12:32

@寒叶: 呃,我说的是调用同一个Action,@{ Html.RenderAction("action", "Contrller");}

支持(0) 反对(0) 淘@淘 | 园豆:602 (小虾三级) | 2013-04-02 13:04

@淘@淘: 但是Action对应的cshtml文件是固定的,这样我在不同的页面想显示不同的DIV样式就不可能了。

支持(0) 反对(0) 秋叶无痕 | 园豆:26 (初学一级) | 2013-04-02 17:24
0

 在mvc中partialview就是控件,所以看不到你说的问题,为什么解决不了……

sinhbv | 园豆:2579 (老鸟四级) | 2013-04-02 13:11
0

partialview类似webform中使用ascx

丫的 | 园豆:1575 (小虾三级) | 2013-04-02 15:03
public class ControlController : Controller
{

         public PartialViewResult Test()
        {
        List<string> a=new List<string>{"a","b","c","1","2","3"};
    
            return PartialView(a);
        }
}

@{ Html.RenderAction("Test", "Control");}  

这样是默认调用View目录下Control文件夹中的Test.cshtml 或者Test.ascx吧?

假设我首页需要用这样的模板Test.ascx.

@foreach (var t in Model)
 {
     @t
     <br>
 }

而信息页需要Test1.ascx

@for(int i=0 ;i<Model.Count;i++)
 {
     @i  @t
     <br>
 }

你跟我说怎么调用。。。

支持(0) 反对(0) 秋叶无痕 | 园豆:26 (初学一级) | 2013-04-02 17:31

@寒叶: 你的Model 改成一个类 加个ShowID属性 然后这样

@for(int i=0 ;i<Model.List.Count;i++)
 {
     @if(Model.ShowID)
    {@i}  @Model.List[i]
     <br>
 }
支持(0) 反对(0) 丫的 | 园豆:1575 (小虾三级) | 2013-04-02 18:55
0

加个ShowID

zhi++ | 园豆:487 (菜鸟二级) | 2013-04-10 20:39
0

数据源相同,返回不同的部分视图就行,我也遇见这样的问题。已经解决。

我想啸天 | 园豆:79 (初学一级) | 2015-02-06 10:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册