温馨提示×

温馨提示×

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

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

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

发布时间:2021-07-15 09:43:18 来源:亿速云 阅读:156 作者:chen 栏目:编程语言

本篇内容主要讲解“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.  

  7. publicPostValueProvider(ControllerContextcontext)  

  8. {  

  9. this.context=context;  

  10. //dProvider=newDefaultValueProvider(context);  

  11. }  

  12.  

  13. #regionIValueProvider成员  

  14.  

  15. publicValueProviderResultGetValue(stringname)  

  16. {  

  17. if(string.IsNullOrEmpty(name))  

  18. {  

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

  20. }  

  21. switch(name)  

  22. {  

  23. case"Tags":  

  24. returnGetTagsValue();  

  25. case"Categories":  

  26. returnGetCategoriesValue();  

  27. default:  

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

  29. }  

  30. }  

  31.  

  32. #endregion  

  33.  

  34. privateValueProviderResultGetTagsValue()  

  35. {  

  36. stringstrTags=GetValueFromRequest("Tags");  

  37. if(string.IsNullOrEmpty(strTags))  

  38. {  

  39. returnnull;  

  40. }  

  41.  

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

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

  44. foreach(stringtagintags)  

  45. {  

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

  47. }  

  48.  

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

  50. }  

  51.  

  52. privateValueProviderResultGetCategoriesValue()  

  53. {  

  54. stringstrCategories=GetValueFromRequest("Categories");  

  55. if(string.IsNullOrEmpty(strCategories))  

  56. {  

  57. returnnull;  

  58. }  

  59.  

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

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

  62. foreach(stringcincategories)  

  63. {  

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

  65. }  

  66.  

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

  68. }  

  69.  

  70. privatestringGetValueFromRequest(stringname)  

  71. {  

  72. stringvalue=null;  

  73. HttpRequestBaserequest=context.HttpContext.Request;  

  74. if(request!=null)  

  75. {  

  76. if(request.QueryString!=null)  

  77. {  

  78. value=request.QueryString[name];  

  79. }  

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

  81. {  

  82. value=request.Form[name];  

  83. }  

  84. }  

  85.  

  86. returnvalue;  

  87. }  

然后我们就可以在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.  

  17. ..  

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

向AI问一下细节

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

AI