ASP.NET MVC中如何使用UpdataModel方法

发布时间:2021-07-15 09:43:18 作者:chen
阅读:168
开发者专用服务器限时活动,0元免费领! 查看>>

本篇内容主要讲解“ASP.NET MVC中如何使用UpdataModel方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ASP.NET MVC中如何使用UpdataModel方法”吧!

ASP.NET MVC Beta版中,在UpdataModel方法中提供了一个带有IValueProvider参数的重载。那么这个IValueProvider有什么用呢?

我们先来看一个简单的场景,例如我们的blog系统有一个Post的对象,Post对象有一个Tags属性和Categories属性,他们的类型分别是:

Post.Tags : StateList<string> (BlogEngine.NET 中的一个List<T>的扩展类型)  Post.Categories : StateList<Category>


假如我们要在ASP.NET MVC中使用UpdataModel方法来对我们Post过来的Form表单数据更新到我们的Post对象中,可能会有如下的代码:

/// <summary> /// 将提交过来的新随笔表单内容保存到数据库  /// </summary> [AcceptVerbs("POST"), ActionName("NewPost")]  public ActionResult SaveNewPost(FormCollection form)  {      Post post = new Post();      try      {  UpdateModel(post, new[] { "Title", "Content", "Slug", "Tags", "Categories" });      }      catch      {          return View(post);      }      ..  }

很明显,在上面的代码中,我们使用UpdateModel来更新Tags和Categories属性的时候,是不可能成功的,因为UpdateModel方法不知道怎样将Form提交过来的"Tags"和"Categories"数据转换为StateList<string>类型和 StateList<Category>类型。这时候就需要我们提供一个ValueProvider,来进行这个转换。

要实现一个ValueProvider,我们只需要实现IValueProvider接口的GetValue方法,并且返回一个 ValueProviderResult的结果就可以了。下面我们就写一个PostValueProvider来实现上面我们提出的情况。代码如下:

  1. PostValueProvider  

  2. publicclassPostValueProvider:IValueProvider  

  3. {  

  4. privateControllerContextcontext;  

  5. //privateDefaultValueProviderdProvider;  

  6. publicPostValueProvider(ControllerContextcontext)  

  7. {  

  8. this.context=context;  

  9. //dProvider=newDefaultValueProvider(context);  

  10. }  

  11. #regionIValueProvider成员  

  12. publicValueProviderResultGetValue(stringname)  

  13. {  

  14. if(string.IsNullOrEmpty(name))  

  15. {  

  16. thrownewArgumentException("参数不能为空","name");  

  17. }  

  18. switch(name)  

  19. {  

  20. case"Tags":  

  21. returnGetTagsValue();  

  22. case"Categories":  

  23. returnGetCategoriesValue();  

  24. default:  

  25. returnnewDefaultValueProvider(context).GetValue(name);  

  26. }  

  27. }  

  28. #endregion  

  29. privateValueProviderResultGetTagsValue()  

  30. {  

  31. stringstrTags=GetValueFromRequest("Tags");  

  32. if(string.IsNullOrEmpty(strTags))  

  33. {  

  34. returnnull;  

  35. }  

  36. string[]tags=strTags.Split(newstring[]{","},StringSplitOptions.
    RemoveEmptyEntries);  

  37. StateList<string>tagsList=newStateList<string>();  

  38. foreach(stringtagintags)  

  39. {  

  40. tagsList.Add(tag.Trim().ToLowerInvariant());  

  41. }  

  42. returnnewValueProviderResult(tagsList,strTags,CultureInfo.
    InvariantCulture);  

  43. }  

  44. privateValueProviderResultGetCategoriesValue()  

  45. {  

  46. stringstrCategories=GetValueFromRequest("Categories");  

  47. if(string.IsNullOrEmpty(strCategories))  

  48. {  

  49. returnnull;  

  50. }  

  51. string[]categories=strCategories.Split(newstring[]{","},
    StringSplitOptions.RemoveEmptyEntries);  

  52. StateList<Category>list=newStateList<Category>();  

  53. foreach(stringcincategories)  

  54. {  

  55. list.Add(Category.GetCategory(newGuid(c)));  

  56. }  

  57. returnnewValueProviderResult(list,strCategories,CultureInfo.InvariantCulture);  

  58. }  

  59. privatestringGetValueFromRequest(stringname)  

  60. {  

  61. stringvalue=null;  

  62. HttpRequestBaserequest=context.HttpContext.Request;  

  63. if(request!=null)  

  64. {  

  65. if(request.QueryString!=null)  

  66. {  

  67. value=request.QueryString[name];  

  68. }  

  69. if(string.IsNullOrEmpty(value)&&(request.Form!=null))  

  70. {  

  71. value=request.Form[name];  

  72. }  

  73. }  

  74. returnvalue;  

  75. }  

然后我们就可以在UpdateModel方法中使用我们的PostValueProvider了:

  1. ///<summary> 

  2. ///将提交过来的新随笔表单内容保存到数据库  

  3. ///</summary> 

  4. [AcceptVerbs("POST"),ActionName("NewPost")]  

  5. publicActionResultSaveNewPost(FormCollectionform)  

  6. {  

  7. Postpost=newPost();  

  8. try  

  9. {  

  10. UpdateModel(post,new[]{"Title","Content","Slug","Tags","Categories"},
    newPostValueProvider(ControllerContext));  

  11. }  

  12. catch  

  13. {  

  14. returnView(post);  

  15. }  

  16. ..  

到此,相信大家对“ASP.NET MVC中如何使用UpdataModel方法”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读:
  1. ASP.NET MVC 基础入门
  2. ASP.NET MVC 视图(三)

开发者交流群:

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

asp.net asp.net mvc

上一篇:mysql中如何解决Can't locate ExtUtils/MakeMaker.pm in @INC报错问题

下一篇:ASP.NET MVC的Action方法怎么用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》
开发者交流群×