asp.Net   发布时间:2022-04-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Asp.net mvc 知多少(五)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

本节主要讲解几种页面传值方式和http请求与action的映射

Q50. 介绍下ViewData,ViewBag,TemPDAta 和 Session间的不同之处? Ans. 在ASP.NET MVC 中有三种方式从controller传值到view中:ViewData,ViewBag 和 TemPDAta。Asp.net WebForm 中可以在一次用户会话中使用Session去持久化数据。

s.jianshu.io/upload_images/2799767-30d9b40a357e5bca.png?imageMogr2/auto-orient/Strip%7CimageView2/2/w/1240">

ViewData

  • ViewData 是一个继承自ViewDataDictionary类的字典对象。public ViewDataDictionary ViewData { get; set; }
  • ViewData 用来从controller中传值到相对应的view中。
  • 生命周期仅存在于当前此次请求。
  • 如果发生重定向,那么值将会被清空。
  • 从ViewData中取值时需要进行类型转换和Null check以避免异常。

ViewBag

  • ViewBag ViewBag是一个动态属性,是基于C# 4.0的动态语言的特性。public Object ViewBag { get;}
  • 是对ViewData的一次包装,也是用来从controller中传值到相对应的view中。
  • 生命周期仅存在于当前此次请求。
  • 如果发生重定向,那么值将会被清空。
  • 从ViewBag中取值时不需要进行类型转换。

TemPDAta

  • TemPDAta 是一个继承于TemPDAtaDictionary类的字典对象,存储于Session中 。public TemPDAtaDictionary TemPDAta { get; set; }
  • TemPDAta 用来进行跨页面请求传值。
  • TemPDAta被请求后生命周期即结束。
  • 从TemPDAta中取值时需要进行类型转换和Null check以避免异常。
  • 主要用来存储一次性数据信息,比如error messages,validation messages。 详情可参http://www.jianshu.com/p/eb7a301bc536">TemPDAta知多少,Session
  • ASP.NET MVC中Session是Controller中的一个属性,Session是httpSessionStateBase类型。public httpSessionStateBase Session { get; }
  • Session保存数据直到用户会话结束(默认session过期时间为20mins)。
  • Session对所有的请求都有效,不仅仅是单一的跳转。
  • 从Session中取值时需要进行类型转换和Null check以避免异常。

Q51. 如何持久化TemPDAta? Ans. TemPDAta的生命周期十分短暂,只能存活到目标视图完全加载之后。 但是我们可以通过调用Keep方法去持久化TemPDAta至下一次访问。

  • void Keep() - 调用这个方法将保证此次请求之后所有的TemPDAta都将会被持久化。
public ActionResult Index()
{
 ViewBag.message = TemPDAta["message"];
 employee emp = TemPDAta["emp"] as employee; //need type casTing
 TemPDAta.Keep();//persist all Strings values
 return View();
}
  • void Keep(String key) - 调用这个方法将保证此次请求之后指定的TemPDAta会被持久化。
public ActionResult Index()
{
 ViewBag.message = TemPDAta["message"];
 employee emp = TemPDAta["emp"] as employee; //need type casTing
 //persist only data for emp key and message key will be destroy
 TemPDAta.Keep("emp");
 return View();
}

Q52. ASP.NET MVC中如何控制session的行为? Ans. 默认ASP.NET MVC 支持 session state(会话状态). Session用来存储跨请求 期间的数据。 不管你是否在session中存储数据,ASP.NET MVC都必须为所有的controller管理 session state,且是耗时的 。因此session是存储在服务器端的,消耗服务器的内存,所以必然影响你的应用程序的性能。 如果你的某些controller不需要session控制,可以手动关闭session控制,来增加微小的性能提升。 可以通过 session state的配置项来简化它。 ASP.NET MVC4中的SessionState特性中,可以通过指定SessionStateBehavior枚举来实现更多对session-state的控制。

  • Default :默认的session state控制方式。
  • Disabled: Session state完全关闭。
  • ReadOnly:只读的session state。
  • @R_616_10613@ired:完全的可读写的 session state。

s.jianshu.io/upload_images/2799767-c7bba70e11c2b66f.jpg?imageMogr2/auto-orient/Strip%7CimageView2/2/w/1080/q/50">


Q53. ASP.NET MVC中 TemPDAta与Session 有什么关联关系? Ans. ASP.NET MVC中TemPDAta使用session存储跨请求的临时数据。因此,当你关闭了controller的session,当你去使用TemPDAta时,就会抛出以下异常。s.jianshu.io/upload_images/2799767-b796134cb630263d.jpg?imageMogr2/auto-orient/Strip%7CimageView2/2/w/1080/q/50">


Q54. ASP.NET MVC中什么是Action方法? Ans. Controller中的action是定义在Controller类中的方法用来执行基于用户请求的操作,并在Model的帮助下将结果传递会View。 Asp.net MVC 中集成了以下几种ActionResults类型及对应的帮助类方法:

  1. ViewResult - 使用COntroller中提供的View()方法返回一个ViewResult用来呈现指定或默认的View。
  2. PartialViewResult- 使用COntroller中提供的PartialView()方法返回一个PartialViewResult用来呈现指定或默认的分部视图。
  3. RedirectResult - 使用COntroller中提供的Redirect()方法返回一个RedirectResult用来发起一个 http 301 或 302 到指定URL的跳转。
  4. RedirectToRouteResult - 使用COntroller中提供的RedirectToAction(),RedirectToActionPeRMANent(),RedirectToRoute(),RedirectToRoutePeRMANent()方法返回一个RedirectToRouteResult用来发起一个 http 301或 302 到指定action或者路由的跳转。
  5. ContentResult - 使用COntroller中提供的Content()方法返回一个ContentResult用来呈现指定的文本。
  6. JsonResult - 使用COntroller中提供的Json()方法返回一个JsonResult用来呈现序列化的Json格式数据。
  7. JavaScriptResult - 使用COntroller中提供的JavaScript()方法返回一个JavaScriptResult用来呈现一段JavaScript代码,一般仅用于Ajax请求的场景。
  8. FileResult - 使用COntroller中提供的File()方法返回一个FileResult用来呈现文件(PDF,DOC,Excel等)内容。
  9. EmptyResult - 返回一个空的结果。
  10. httpNotFoundResult - 使用COntroller中提供的httpNotFound()方法返回一个http 404状态。
  11. httpUnauthorizedResult - 返回一个httpUnauthorizedResult类型用来表示http 401状态(未认证)。用来要求用户登录以完成认证。
  12. httpStatusCodeResult - 返回 httpStatusCodeResult用来表示指定http状态。

Q56. ASP.NET MVC中如何标记Non-Action方法? Ans. ASP.NET MVC 将所有的公共方法默认为action方法。 如果不想某个公共的方法被暴露为Action,仅需要用NonActionAttribute标记方法即可。

[NonAction]
public void DoSomething()
{
 // Method logic
}

Q57. 能否更改Action方法的命名? Ans. 可以通过ActionName特性来修改Action的命名。修改后Action将用ActionName中定义的名称被调用。

[ActionName("DoAction")]
public ActionResult DoSomething()
{
 //TODO:
 return View();
}

这样,DoSomething action就会被会被标记为DoAction action。


Q58. 如何限制action仅能被相应的http GET,POST,PUT or deletE请求访问? Ans. 默认,每一个action方法都可以被任何http请求访问(i.e. GET,PUT, Delete). 但是可以通过为action方法指定httpPost、 httpPut 、 httpdelete 特性来限制action的行为。

[httpGet]
public ActionResult Index()
{
 //TODO:
 return View();
}

Q59. 如何决定一个action是被http GET还是POST请求? Ans. 通过使http@R_616_10613@estBase类的httpR_290_11845@ethod属性可以判断action是被哪种http请求调用。

public ActionResult Index(int? id)
{
 if (@R_616_10613@est.httpR_290_11845@ethod == "GET")
 {
 //TODO:
 }
 else if (@R_616_10613@est.httpR_290_11845@ethod == "POST")
 {
 //TODO:
 }
 else
 {
 //TODO:
 }
return View();
}

Q60. 如何判断一个AJAX请求? Ans. 通过使@R_616_10613@est.IsAjax@R_616_10613@est()来判断。

public ActionResult DoSomething()
{
 if (@R_616_10613@est.IsAjax@R_616_10613@est())
 {
 //TODO:
 }
 return View();
}

大佬总结

以上是大佬教程为你收集整理的Asp.net mvc 知多少(五)全部内容,希望文章能够帮你解决Asp.net mvc 知多少(五)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: