本篇内容主要讲解“ASP.NET MVC中如何使用UpdataModel方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ASP.NET MVC中如何使用UpdataModel方法”吧!
成都创新互联自2013年创立以来,先为阆中等服务建站,阆中等地企业,进行企业商务咨询服务。为阆中企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
ASP.NET MVC Beta版中,在UpdataModel方法中提供了一个带有IValueProvider参数的重载。那么这个IValueProvider有什么用呢?
我们先来看一个简单的场景,例如我们的blog系统有一个Post的对象,Post对象有一个Tags属性和Categories属性,他们的类型分别是:
Post.Tags : StateList(BlogEngine.NET 中的一个List 的扩展类型) Post.Categories : StateList
假如我们要在ASP.NET MVC中使用UpdataModel方法来对我们Post过来的Form表单数据更新到我们的Post对象中,可能会有如下的代码:
////// 将提交过来的新随笔表单内容保存到数据库 /// [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
要实现一个ValueProvider,我们只需要实现IValueProvider接口的GetValue方法,并且返回一个 ValueProviderResult的结果就可以了。下面我们就写一个PostValueProvider来实现上面我们提出的情况。代码如下:
PostValueProvider
publicclassPostValueProvider:IValueProvider
{
privateControllerContextcontext;
//privateDefaultValueProviderdProvider;
publicPostValueProvider(ControllerContextcontext)
{
this.context=context;
//dProvider=newDefaultValueProvider(context);
}
#regionIValueProvider成员
publicValueProviderResultGetValue(stringname)
{
if(string.IsNullOrEmpty(name))
{
thrownewArgumentException("参数不能为空","name");
}
switch(name)
{
case"Tags":
returnGetTagsValue();
case"Categories":
returnGetCategoriesValue();
default:
returnnewDefaultValueProvider(context).GetValue(name);
}
}
#endregion
privateValueProviderResultGetTagsValue()
{
stringstrTags=GetValueFromRequest("Tags");
if(string.IsNullOrEmpty(strTags))
{
returnnull;
}
string[]tags=strTags.Split(newstring[]{","},StringSplitOptions.
RemoveEmptyEntries);StateList
tagsList=newStateList (); foreach(stringtagintags)
{
tagsList.Add(tag.Trim().ToLowerInvariant());
}
returnnewValueProviderResult(tagsList,strTags,CultureInfo.
InvariantCulture);}
privateValueProviderResultGetCategoriesValue()
{
stringstrCategories=GetValueFromRequest("Categories");
if(string.IsNullOrEmpty(strCategories))
{
returnnull;
}
string[]categories=strCategories.Split(newstring[]{","},
StringSplitOptions.RemoveEmptyEntries);StateList
list=newStateList (); foreach(stringcincategories)
{
list.Add(Category.GetCategory(newGuid(c)));
}
returnnewValueProviderResult(list,strCategories,CultureInfo.InvariantCulture);
}
privatestringGetValueFromRequest(stringname)
{
stringvalue=null;
HttpRequestBaserequest=context.HttpContext.Request;
if(request!=null)
{
if(request.QueryString!=null)
{
value=request.QueryString[name];
}
if(string.IsNullOrEmpty(value)&&(request.Form!=null))
{
value=request.Form[name];
}
}
returnvalue;
}
}
然后我们就可以在UpdateModel方法中使用我们的PostValueProvider了:
///
///将提交过来的新随笔表单内容保存到数据库
///
[AcceptVerbs("POST"),ActionName("NewPost")]
publicActionResultSaveNewPost(FormCollectionform)
{
Postpost=newPost();
try
{
UpdateModel(post,new[]{"Title","Content","Slug","Tags","Categories"},
newPostValueProvider(ControllerContext));}
catch
{
returnView(post);
}
..
}
到此,相信大家对“ASP.NET MVC中如何使用UpdataModel方法”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!