ASP.NET MVC5 页面asp点击按钮跳转页面机制

ASP.NET的Mvc5跳转页面传值
我来回答:
登录后才能回答(&)
查看效果:
1.在项目中&,找到\Home\Index.cshtml打开。然后运行项目。结果如下:
2.点击页面中蓝色字体的传值页面,就是一个传值的页面链接。单击它,结果如下:
(注:其中,就是传进来的参数。)
实现过程:
1.首页文件,打开写入以下代码:
@Html.ActionLink("传值页面",&"RsvpForm/lily/3")
2.其次在App_Start文件下找到RouteConfig.cs文件,写入以下代码:
routes.MapRoute(
&&&&&&&&&&&&&&&&name:&"Hello",
&&&&&&&&&&&&&&&&url:&"{controller}/{action}/{name}/{id}"
&&&&&&&&&&&&);
3.在Controllers文件夹下找到HomeController.cs文件,添加以下代码:
public&ViewResult&RsvpForm(string&name,int&id=1)
&&&&&&&&&&&&//该控制器用来指定显示的视图,并接收了跳转页面带来的两个参数,赋值给ViewBag.hello。
&&&&&&&&&&&&ViewBag.hello&=&HttpUtility.HtmlEncode("Hello&"&+&name&+&",&ID&is:&"&+&id);
&&&&&&&&&&&&return&View();
4.在Views\Home\RsvpForm.cshtml文件,写入以下代码:
&@ViewBag.hello
扫描二维码关注微信
请选择(填写)你的举报理由
问题内容涉及敏感信息
问题广告嫌疑
散布谣言,扰乱社会秩序
侮辱或者诽谤他人,侵害他人合法权益
含有法律、行政法规禁止的其他内容总结一下ASP.NET MVC5视图中显示可变的局部Html模块的方法_蓝狐软件工作室
ASP.NET MVC
Posted By : 蓝狐
ASP.NET 5视图中可能会经常遇到需要在多个视图中者要显示一个相同或者相近的局部Html模块的情况,这个时候我是怎么做的呢?今天我就来总结一下ASP.NET MVC5视图中显示局部Html模块的方法。
一、使用section
我们可以在母版页面_Layout.cshtml中调用一个section块做为占位,然后在各视图定义这个section包含的内容。比如下面一个实例:
_Layout.cshtml加入下面代码:
@RenderSection("secHeader", false)
上面的false表示这个section块是可选,如果在使用这个母版页面的视图没即使没下定义这个section也不会报错。接下来在视图中加入代码:
@section secHeader{
&script src="/Content/js/idangerous.swiper-2.1.min.js"&&/script&
&link rel="stylesheet" href="/Content/css/index.css?v=0416" /&
点评:这样就可以在各自的视图加入自己特有代码(css,js等等),通过section可以很方便的在列表视图和详情视图加载不同的样式和js文件。
二、使用Html.Action
使用Html.Action方法调用一个Controller的Action方法来返回局部Html。最终在视图里调用方法:
@Html.Action("SearchTag", "Home")
SearchTag是Home里面一个Action方法用来显示热门搜索tag。SearchTag定义如下:
[ChildActionOnly]
public PartialViewResult SearchTag()
IList&Hashtable& model = AdvertHelper.GetAdvert("搜索页广告位");
return PartialView(model);
点评:Html.Action可以调用一个Action方法返回一个子视图。Html.Action因为调用的是Controller的Action,因此能够充分利用Action的优点可以传递一些参数,调用动态数据达到返回动态内容的视图。
三、使用Html.Partial
使用Html.Partial可以返回一个部分视图。它有四个重载的函数。
public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName);
public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName, object model);
public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName, ViewDataDictionary viewData);
public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName, object model, ViewDataDictionary viewData);
点评:Html.Partial方法一般用于一个固定的部分视图,比如页面的头部或尾部。当然我们从上面也可以看到Html.Partial方法其实也可以传递model数据。
本站文章除注明转载外,均为本站原创或翻译,欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,共创和谐网络环境。
转载请注明:文章转载自: >>
本文标题:总结一下ASP.NET MVC5视图中显示可变的局部Html模块的方法
本文地址:/Article/282.html
本科学历,蓝狐软件工作室创始人。2009年开始从事软件开发行业,从事软件开发互朕网7年以上,3年以上项目管理和架构设计经验,具有丰富的电子商务行业的移动和Web应用的架构设计和开发经验。参与过高并发、高可用、分布式系统设计,熟悉SOA架构设计,有敏捷开发经验。熟悉.NET和Java EE相关技术和框架,熟悉Linux、Windows、Nginx、Mysql等服务器的部署和优化。熟悉主流的开发语言,擅长SQL Server、mysql、Oracle等主流数据库,通过了Oracle OCP 11g认证,有丰富的数据库性能优化和设计经验。独立开发了多个人作品:蓝狐seo管理系统、seo关键词按天计费系统、蓝狐软件工作室门户等。曾在多家移动互联网担当核心技术研发和管理工作,同时承担关键技术难点攻关和设计高性能的技术架构。把握平台的技术发展方向,对技术发展及时提出指导性意见。在提高平台的稳定性、性能、质量等方面做出了重要贡献。目前专职于为企业提供优质的信息化建设服务,其中不限于系统、软件定制开发和高端网站建设。
发表成功!& & &nopCommerce的插件机制的核心是使用BuildManager.AddReferencedAssembly将使用Assembly.Load加载的插件程序集添加到应用程序域的引用中。具体实现可以参考nopCommerce解决方案中Nop.Core项目的Plugins目录下的相关文件。其中PluginManager.cs文件是核心文件,包含了处理插件化的核心代码。
& & &我们直接从nopCommerce3.5的实现中抽取必要的实现代码,制作一个简易版的插件系统Demo用于演示ASP.NET MVC的插件化,核心只包含一个标记接口IPlugin,一个管理类PluginManager包含2个必要方法Initialize和ReStart。
二.新建主Web项目
& & &主项目新建一个MVC项目,根目录和App_Data下新建一个plugins文件夹,
& & &约定&~/Plugins&作为插件根目录。& & &约定&~/App_Data/Plugins&作为中等信任级别下的运行时目录。
& & &插件在运行时加载的是插件程序集在运行时目录的副本,不直接加载插件而是加载运行时目录中的副本的原因是避免插件升级或删除时dll文件被锁定。
& & &用Neget引用:
三.新建插件
& & & &约定插件名称要以&Plugin.&开头例如Plugin.Demo
& & & &1.新建一个MVC项目Plugin.Demo
& & & &2.引用Plugin.Interfaces.dll 和Plugin..dll& (项目packages里面或者通过nuget)
& & & &3.新建DemoPlugin 实现IPlugin 接口
& & & &具体代码:
using System.R
using System.Web.M
using System.Web.R
namespace Plugin.Demo
public class DemoPlugin :IPlugin
public string Name
return Assembly.GetExecutingAssembly().GetName().Name.Replace("Plugin.", "");
public void Initialize()
var route = RouteTable.Routes.MapRoute(
name: this.Name,
url: this.Name+"/{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, pluginName = this.Name }
route.DataTokens["area"] = this.N
public virtual void Unload()
RouteTable.Routes.Remove(RouteTable.Routes[this.Name]);
  四.测试插件内容
&手动拷贝:
& 1)把生成的bin文件夹、Views文件夹拷贝到主项目Plugins下的demo文件下
& 2)再把Plugin.Demo.dll拷贝到主项目App_data/plugins 下面
& 3)在主项目页面写个连接
& & & & & &@Html.ActionLink("Demo", "Index", "Home", new { area = "Demo" }, null)
& & & & & &看看能够访问到插件的内容了吗?如果能访问插件安装成功了
& 注意:bin文件夹只留Plugin.Demo.dll和自己新建的类库生成的Dll;如果有js、图片、样式等也需要拷贝的
自动拷贝:
& & & 右键项目--&属性--&生成事件& 在后期生成事件命令行填写如下命令:
& & 注意:如果项目无任何改动,&生成&是不会编译的,所以当运行生成后事件选中&生成更新项目输出时&,不会被执行,但&重新生成&会无条件的输出,并触发事件
阅读(...) 评论()AOP实践--利用MVC5 Filter实现登录状态判断_蓝狐软件工作室
ASP.NET MVC
Posted By : 蓝狐
AOP有的翻译“面向切面编程”,有的是“面向方面编程”。其实名字不重要,思想才是核心,的Filter让我们很方便达到这种面向方面编程,就是在现有代码的基础上注入外部代码,也就是所谓的面向方面编程,比如身份验证。下面通过一个具体的例子来体验一下MVC的AOP。
1、定义一AuthenAdminAttribute特性类
public class AuthenAdminAttribute : FilterAttribute, IAuthenticationFilter
public void OnAuthentication(AuthenticationContext filterContext)
//这个方法是在Action执行之前调用
var user = filterContext.HttpContext.Session["AdminUser"];
if (user == null)
//filterContext.HttpContext.Response.Redirect("/Account/Logon");
var Url = new UrlHelper(filterContext.RequestContext);
var url = Url.Action("Logon", "Account", new { area=""});
filterContext.Result = new RedirectResult(url);
public void OnAuthenticationChallenge(AuthenticationChallengeContext filterContext)
//这个方法是在Action执行之后调用
是否登录是通过Session键值为AdminUser的值是否为null判断,如果为null也就是还没有登录或者过期了,就跳转到登录页面,即"/Account/Logon"。
注意:上面OnAuthentication是在最开始被调用的,也在ActionFilter方法之前。而OnAuthenticationChallenge方法是在Action执行之后,返回视图之前被调用。所以要把登录验证写在方法OnAuthentication中。而且在里面我们用到了设置filterContext.Result = new RedirectResult(url);而不是跳转的形式,很关键的。MVC在执行Filter时,如果我们手动用一个ActionResult对象指定了其Context对象的Result属性的值,那么这个这个ActionResult将作为这个请求的结果输出,并且在这次请求管道中剩下的步骤将不再继续执行。反之如果没有设置filterContext.Result的值,它会继续执行接下来的步骤,甚至是Action方法,就算我们设置了跳转。
2、定义登录Controller
public class ManageController : Controller
public ActionResult Logon()
return View();
[HttpPost]
public ActionResult Logon(string username,string password)
if (username == "admin" && password == "admin")
Session["AdminUser"] =
return RedirectToAction("Index",
"Order", new { area = "Admin" });
ViewBag.Error = "用户名或密码不正确!";
return View();
public ActionResult LogOff()
if (Session["AdminUser"] != null)
Session["AdminUser"] =
return RedirectToAction("Logon");
Action名为Logon的方法就是里面就是登录相关逻辑,这里的逻辑我为了简单化,就直接把用户名和密码固定写死了。当然实际过程中你可以根据你自己的需要,比如结合数据库表记录来判断用户名密码是否合法,如果合法就相应的信息存在Session里面,当然你也可以存在Cookie里。
注意:这里登录成功之后的存Session的key一定要和上面第一步的AuthenAdminAttribute用到的key一致。
3、设置需要登录判断的Controller或者Action
最后就是根据你的需要,看哪些Controller或者Action需要登录才能访问,只需要在前面加上我们在上面定义好的特性类就可以了。 &&
[AuthenAdmin]
public class CategoryController : Controller
public ActionResult Index()
//此处省略具体逻辑代码
return View();
上面是对整个Controller都要登录验证,就是这个Controller的所有Action必须要登录才能访问。那如果要针对单独的一个Action控制,其它不做要求呢?这也很好办。代码这样写就可以了。
public class CategoryController : Controller
public ActionResult Index()
//此处省略具体逻辑代码
return View();
[AuthenAdmin]
public ActinResult List()
//此处省略具体逻辑代码
return View();
这样就是只有List这个Action需要登录,Index就不用登录就能访问。
最后,说一下第一步为什么我要自己实现IAuthenticationFilter接口,而不直接继承AuthorizeAttribute,比如这样写
public class CustomAuthAttribute : AuthorizeAttribute {
private bool localA
public CustomAuthAttribute(bool allowedParam) {
localAllowed = allowedP
protected override bool AuthorizeCore(HttpContextBase httpContext) {
var user = httpContext.Session["AdminUser"];
return user != null
可以看到AuthorizeAttribute核心方法是AuthorizeCore返回值是一个bool类型,也就是只能判断是否登录过了,这种情况如果你的系统采用Form验证这个,确实是一个简单可行的方案。如果要涉及到更加细微的权限控制或者要把登录信息存储到Session或者其实地方就不太好办了,因为ASP.NET的Form验证是基于Cookie的。所以我一般建议自己实现接口IAuthenticationFilter,这样让我们的系统更加灵活,更加容易扩展和控制。
这样最后来看我们的业务逻辑代码不会有身份验证相关的代码,登录验证和业务逻辑代码完全隔离开了,业务逻辑代码变得简洁了许多,这就是我理解的:你只需要针对一方面编程,也就是AOP提倡的面向方面编程。AOP技术让我们的软件模块之间的耦合性降低,大大的提高的我们软件的可维护性和可复用性,AOP你值得拥有。
本站文章除注明转载外,均为本站原创或翻译,欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,共创和谐网络环境。
转载请注明:文章转载自: >>
本文标题:AOP实践--利用MVC5 Filter实现登录状态判断
本文地址:/Article/73.html
本科学历,蓝狐软件工作室创始人。2009年开始从事软件开发行业,从事软件开发互朕网7年以上,3年以上项目管理和架构设计经验,具有丰富的电子商务行业的移动和Web应用的架构设计和开发经验。参与过高并发、高可用、分布式系统设计,熟悉SOA架构设计,有敏捷开发经验。熟悉.NET和Java EE相关技术和框架,熟悉Linux、Windows、Nginx、Mysql等服务器的部署和优化。熟悉主流的开发语言,擅长SQL Server、mysql、Oracle等主流数据库,通过了Oracle OCP 11g认证,有丰富的数据库性能优化和设计经验。独立开发了多个人作品:蓝狐seo管理系统、seo关键词按天计费系统、蓝狐软件工作室门户等。曾在多家移动互联网担当核心技术研发和管理工作,同时承担关键技术难点攻关和设计高性能的技术架构。把握平台的技术发展方向,对技术发展及时提出指导性意见。在提高平台的稳定性、性能、质量等方面做出了重要贡献。目前专职于为企业提供优质的信息化建设服务,其中不限于系统、软件定制开发和高端网站建设。
找了好久,在这里终于解决了我的问题!
发表成功!经检测你所在的网络可能存在爬虫,因资源限制,我们只能拒绝你的请求。
如果你是推酷的用户,可以以继续访问使用。
如有疑问,可将IP信息发送到
请求解封。

我要回帖

更多关于 asp.net后台跳转页面 的文章

 

随机推荐