就是类似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。进行调用.
首先:一个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
... ... ... ...
return View("指定你的视图名称就OK了");
我上面讲了,一个分部视图只能对应一个cshtml?
但是我需要这个分部视图有多个DIV样式。
比如在首页我需要用蓝色,信息页用红色,浏览页用黄色。
我总不可能创建N个同样的视图吧?
这么多分。。
cshtml中
@{ Html.RenderAction("action名", "控制器名");}
或者 @Html.Partial("视图名")
或者@{ Html.RenderPartial("视图名");}
我不是问怎么调用啊。我是问多个cshtml如何对应一个Action。就是说多个cshtml中的Model数据源一样,只是DIV样式不一样。
难道只能由主页面提供数据?
@寒叶:
局部视图啊,咋回事,不晓得 你要啥效果。
@Qlin: 局部视图的一个Action方法只能对应一个cshtml啊? 如果我再想添加一个DIV样式,只能再创建一个Action,重新编译。。
我的意思是视图里用的数据一样。 就是div样式不同.
那能不能这样?
public ActionResult Top(string cshtmlFile)
{
var Model=new{dd="ss"};
return View(cshtmlFile,Model);
}
这种方式,视图里怎么调用呢?就是传入path变量
@寒叶:
如果 多个 局部视图,你的方式 可以啊。
对应一个Action你就调一个Action不就行了么
那我得创建多少个ACTION,这不科学
@寒叶: 呃,我说的是调用同一个Action,@{ Html.RenderAction("action", "Contrller");}
@淘@淘: 但是Action对应的cshtml文件是固定的,这样我在不同的页面想显示不同的DIV样式就不可能了。
在mvc中partialview就是控件,所以看不到你说的问题,为什么解决不了……
partialview类似webform中使用ascx
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> }
你跟我说怎么调用。。。
@寒叶: 你的Model 改成一个类 加个ShowID属性 然后这样
@for(int i=0 ;i<Model.List.Count;i++) { @if(Model.ShowID) {@i} @Model.List[i] <br> }
加个ShowID
数据源相同,返回不同的部分视图就行,我也遇见这样的问题。已经解决。