Html.ActionLink(转载)

@Html.ActionLink

代码:

<h2>HtmlHelper</h2>
@Html.ActionLink("默认","Index")
@Html.ActionLink("带控制器",
"Index", "RsvpForm")
@Html.ActionLink("带默认路由参数", "Index", new {page=1
})
@Html.ActionLink("带控制器和默认路由参数", "Index", new { page = 1 }, new {id="id001"
})
@Html.ActionLink("带参数和属性", "Index", "RsvpForm", new { page = 1 }, new { id
= "aId", @class = "aClass", @style = "color:red" })

<h2>html
action</h2>
@*@Html.Action("Index")
@Html.Action("Index", new { page
= 1 });
@Html.Action("Index","Home")
@Html.Action("Index", "Home", new {
page = 1 });
*@
@*@Html.Action("MyMenu")
@Html.Action("MyMenu",new
MvcApplication1.Models.MenuItem(){Text="microsoft",Url="http://www.ms.com"})*@
@{Html.RenderAction("MyMenu");}
@{Html.RenderAction("MyMenu","Home");}
@{Html.RenderAction("MyMenu",
new MvcApplication1.Models.MenuItem() { Text = "microsoft", Url =
"http://www.ms.com" });}
@{Html.RenderAction("MyMenu","Home", new
MvcApplication1.Models.MenuItem() { Text = "microsoft", Url =
"http://www.ms.com" });}

<h2>html
urlAction</h2>
@Url.Action("MyMenu")<br/>
@Url.Action("MyMenu","Home")<br
/>
@Url.Action("MyMenu", new MvcApplication1.Models.MenuItem() { Text =
"microsoft", Url = "http://www.ms.com"
})<br/>
@Url.Action("MyMenu","Home", new
MvcApplication1.Models.MenuItem() { Text = "microsoft", Url =
"http://www.ms.com" })<br/>

  后台代码

//这里需要注意的是Menu操作使用了ChildActionOnlyAttribute特性标记,该特性设置防止了运行时直接通过URL来调用Menu操作,只能通过Action或RenderAction操作。在MVC3中,ControllerContext有一个IsChildAction属性,如果通过Action或RenderAction操作则为true,通过URL操作则为false,同时一些操作过滤器不同于子操作如:AuthorizeAttribute和OutputCacheAttribute

[ChildActionOnly]
// [ActionName("CoolMenu")]

//当调用RenderAction方法时,需要确保操作名是CoolMenu而不是Menu。
public ActionResult
MyMenu(MenuItem mi)
{
Menu m = new Menu();

List<MenuItem> items = new List<MenuItem>();

items.Add(new MenuItem() { Text = "Baidu", Url = "http://www.baidu.com" });

items.Add(new MenuItem() { Text = "Sina", Url = "http://www.Sina.com"
});
items.Add(new MenuItem() { Text = "IBM", Url =
"http://www.ibm.com" });
items.Add(new MenuItem() { Text =
"Sohu", Url = "http://www.sohu.com" });
m.Items = items;

// 这里,如果传入的参数不为空,则将Item加入到菜单中
if (!(string.IsNullOrEmpty(mi.Text)))

m.Items.Add(mi);
return PartialView(m);

}

  

  表现:

一 Html.ActionLink("linkText","actionName")

该重载的第一个参数是该链接要显示的文字,第二个参数是对应的控制器的方法,默认控制器为当前页面的控制器,如果当前页面的控制器为Products,则
Html.ActionLink("detail","Detail") 则会生成 <a
href="/Products/Detail">all</a>

二 Html.ActionLink("linkText","actionName","controlName")

该重载比第一个重载多了一个参数,他指定了控制器的名称,如Html.ActionLink("detail","Detail","Products")则会生成<a
href="Products/Detail">all</a>

三 Html.ActionLik("linkText","actionName",routeValues)

routeValue可以向action传递参数,如Html.ActionLink("detail","Detail",new { id=1})会生成
<a href="Products/Detail/1">detail</a>, 此处假设当前的控制器是Products.


Html.ActionLink("linkText","actionName",routeValues,htmlAttributes)

htmlAttribute可以设置<a>标签的属性,如
Html.ActionLink("detail","Detail",new{id=1},new{ target="_blank"})会生成 <a
href="Products/Detail/1" target="_blank">detail</a>,需要主要的是如果写成 new{
target="_blank",class="className"}则会报错,因为class是关键字,此处应该写成
@class="className"。


Html.ActionLink("linkText","actionName","controlName",routeValues,htmlAttributes)

该重载包含了上面提到的所有参数类型


Html.ActionLink("linkText","actionName","controlName","protocol","hostName","fragment",routeValues,htmlAttributes)

该重载使用比较少,他可以指定访问的协议,域名还有锚点,如
Html.ActionLink("liuwu","Detail","Products","http","www.liuwu.me","name",null,null)
可以生成 <a
href="http://www.liuwu.me/Products/Detail#name">liuwu</a>

Html.Action返回值为MvcHtmlString

Html.RenderAction返回值为void

因此注定了它们的行为是不同的。

Html.RenderAction必须写在@{}内,直接有Response对象输出。

Html.Action也可以直接写在界面上,也可把该值赋值给某一变量,处理后在写页面上。

Html.Action更灵活一点。

@{ Html.RenderAction("Index", "Import");}

@Html.Action("Index", "Import")

@Html.ActionLink返回值也是MvcHtmlString

@Url.Action返回值也是string

MvcHtmlString 本质上也就是string,两者都可以直接写在页面上。

@Html.ActionLink("mylink"," CCC ", "Import")

@Url.Action("CCC", "Import")

不同点在于Html.ActionLink会生成<a
href="/Import/CCC">mylink</a>,带<a>标签,而Url.Action直接生成的是string。没有任何tag标签。

Content方法可以将应用程序中的相对路径转换为绝对路径,如下:
<script
src="@Url.Content("~/Scripts/sdf.js")"</script>
在传递为Content方法的字符串前使用波浪线作为第一个字符,无论应用程序部署在什么位置,该辅助方法都可以指向正确的资源,如果不加波浪线,挪动应用程序的位置则生成的URL

Html.Partial和Html.RenderPartial
Pattial方法将分部视图渲染成字符串,该方法共有四个重载版本,如下:
Public
void Partial (string partialViewName);
Public void Partial
(string partialViewName,object model);
Public void Partial
(string partialViewName,ViewDataDictionary viewData);
Public
void Partial (string partialViewName,object model,ViewDataDictionary
viewData);
这里没有毕业为视图指定路径和文件扩展名,直接如下:
@Html.Partial("AlbumDisplay");
RenderPartial与Partial方法类似,但是RenderPartial不是返回字符串而是直接写入相应流中,故需要这样使用@{Html.RenderPartial("AlbumDisplay");}
Partial方法相对灵活,RenderPartial方法相对于大量使用更有优势

?





1

2

3

4

@* Html.Partial("_partViewFortest")*@

         @* @Html.Partial("_partViewFortest", new
GuestResponse() { Name = "jim", Email = "123213", Phone = "123", WillAttend = true
})*@

        @*  @{Html.RenderPartial("_partViewFortest");}*@

           @{Html.RenderPartial("_partViewFortest", new
GuestResponse() { Name = "jim", Email = "123213", Phone = "123", WillAttend = true
});}

 


@model MvcApplication1.Models.GuestResponse
@using (Html.BeginForm())
{
<p>
Your name:@Html.TextBoxFor(x => x.Name)</p>
<p>
your email:@Html.TextBoxFor(x => x.Email)</p>
<p>
your phone:@Html.TextBoxFor(x => x.Phone)</p>
<p>
will you attend?
@Html.DropDownListFor(x => x.WillAttend, new[]{
new SelectListItem(){Text="yes, I‘ll be there",Value=bool.TrueString},
new SelectListItem(){Text="no,I can‘t come",Value=bool.FalseString}
}, "Choose an option")
</p>
<input type="submit" value="Submit RSVP" />
}

2.2RouteLink使用Route规则

  除了这些协同的用法,RouteLink还支持使用Route规则名来创建连接,例如我们在Global.asax文件中添加一个Route规则

  1: routes.MapRoute( 2:"about",//这是规则名 3:"about",//url 4:new
{controller = "Home", action = "about"} 5: ); 那么我们就可以使用这个Route规则1:
<%=Html.RouteLink("关于", "about", new { })%>

  2: <%=Html.RouteLink("关于", "about", new { page = 1
})%>

  3: <%=Html.RouteLink("关于", "about", new { page = 1 }, new { id =
"link1" })%>

来生成如下的HTML:

  1:<ahref="/about">关于</a>

  2:<ahref="/about?page=1">关于</a>

  3:<ahref="/about?page=1"id="link1">关于</a>

?





1

2

3

4

5

6

@Html.RouteLink("默认", new
{ controller = "Home", action = "Index"
})

@Html.RouteLink("页面显示的文字", new
{ action = "index", page = 1 }, new
{ id = "link1"
})

@Html.RouteLink("关于","abc",new{page=1})

@Html.RouteLink("关于", "abc", new
{ page = 1 }, new
{ id = "link1"
})

 routes.MapRoute("abc", "abc", new
{ controller = "Home", action = "about"
});

   如果我们想要让上文中的t1初始时就有一个值,比如 “重典”那么我们可以按以下方式1:
<%=Html.TextBox("t1","重典")
%>如果数据是从数据库中读取,即得到数据是从Action中获取的,那么我们可以在Action中使用ViewData传递Action:1:
ViewData["name"]="重典";View:1: <%=Html.TextBox("t1",ViewData["name"])
%>以上方法看似简单,其实ASP.NET
MVC为我们提供了更为简便的绑定方式---只要保证ViewData的Key与Helper所生成元素的name保持一致就可以自动绑定:Action:1:
ViewData["t1"]="重典";View:1: <%=Html.TextBox("t1")
%>这样就可以自动绑定了

Html.ActionLink(转载),码迷,mamicode.com

时间: 2024-11-05 02:21:47

Html.ActionLink(转载)的相关文章

【转载】MVC Area 区域相关技术

创建Area 右键工程选择 添加->区域,弹出如下填写Area的对话框: 点击添加后,工程目录结构如下: 和创建一个空MVC工程结构类似,Admin Area 有自己的 Controllers.Models 和 Views 文件夹,不一样的地方就是多了一个 AdminAreaRegistration.cs 文件,这个文件中定义了一个叫 AdminAreaRegistration 的类,它的内容如下: namespace MvcApplication1.Areas.Admin { public c

MVC 自定义标签,给Html.ActionLink加上支持图片链接的功能

转载:http://blog.csdn.net/niewq/article/details/17537873 Html.ActionLink只支持文字链接,现在我们利用C#的扩展方法写一个Html.ActionLinkWithImage()让其支持图片链接的功能.一.首先新建一个静态类,将命名空间在改在System.Web.Mvc下,代码如下 using System; using System.Collections.Generic; using System.Linq; using Syst

为 ASP.NET Web API 创建帮助页面(转载)

转载地址:http://www.asp.net/web-api/overview/creating-web-apis/creating-api-help-pages 当创建web API 时,经常要创建一个帮助页,以便其他开发人员知道如何调用您的 API.您可以手动创建的所有文档,但最好是尽可能多地自动生成. 为了简化这一任务,ASP.NET Web API 提供一个库自动生成帮助页. 创建 API 帮助页 安装ASP.NET 和 Web 工具 2012.2 的更新.此更新集成到 Web API

【转载】C++拷贝构造函数(深拷贝,浅拷贝)

对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量.下面看一个类对象拷贝的简单例子. #include <iostream>using namespace std;class CExample {private:     int a;public:     CExample(int b)     { a=b;}     void Show ()     {        cout<

门控时钟-理论分析 ---- 转载

转载自:http://www.chipsbank.com/news_detail/newsId=123.html 门控的基本要求: 1. 所需要的沿(对于正沿触发的寄存器是正沿,对于负沿触发的寄存器是负沿)不增加,不减少: 1. 不会产生毛刺: 1. 使用后功耗要能够降低: 1. 最好面积还会减小. 1. 上升沿触发的门控时钟的结构研究:应用与上升沿触发的寄存器的门控. 1. 直接与门结构: 1. 高电平使能Latch + 与门结构: 1. 低电平使能Latch + 与门结构: 1. 波形研究:

浅谈Java中的equals和==(转载)

在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str2 = new String("hello"); 3 4 System.out.println(str1==str2); 5 System.out.println(str1.equals(str2)); 为什么第4行和第5行的输出结果不一样?==和equals方法之间的区别是什么?如果在初学Java的时候这个问题不弄清楚,就

JVM学习(2)——技术文章里常说的堆,栈,堆栈到底是什么,从os的角度总结--转载http://www.cnblogs.com/kubixuesheng/p/5202561.html

转载自---http://www.cnblogs.com/kubixuesheng/p/5202561.html 俗话说,自己写的代码,6个月后也是别人的代码--复习!复习!复习!涉及到的知识点总结如下: 堆栈是栈 JVM栈和本地方法栈划分 Java中的堆,栈和c/c++中的堆,栈 数据结构层面的堆,栈 os层面的堆,栈 JVM的堆,栈和os如何对应 为啥方法的调用需要栈 属于月经问题了,正好碰上有人问我这类比较基础的知识,无奈我自觉回答不是有效果,现在深入浅出的总结下: 前一篇文章总结了:JV

GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git分支 标签 过滤 Git版本工作流(转载)

最近听同事说他都在使用GitHub,GitHub是程序员的社区,在里面可以学到很多书上学不到的东西,所以最近在准备入手这方面的知识去尝试学习,正好碰到这么详细完整的文章,就转载了,希望对自己和大家有帮助. GitHub操作总结 : 总结看不明白就看下面的详细讲解. GitHub操作流程 : 第一次提交 : 方案一 : 本地创建项目根目录, 然后与远程GitHub关联, 之后的操作一样; -- 初始化Git仓库 :git init ; -- 提交改变到缓存 :git commit -m 'desc

2.EasyUI学习总结(二)——easyloader分析与使用(转载)

本文转载自:http://www.cnblogs.com/haogj/archive/2013/04/22/3036685.html 使用脚本库总要加载一大堆的样式表和脚本文件,在easyui 中,除了可以使用通常的方式加载之外,还提供了使用 easyloader 加载的方式.这个组件主要是为了按需加载组件而诞生.什么情况下使用它呢? 你觉得一次性导入 easyui 的核心 min js 和 css 太大 你只用到 easyui 的其中几个组件 你想使用其中的一个组件,但是你又不知道这个组件依赖