您好,登錄后才能下訂單哦!
本篇內容主要講解“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來實現上面我們提出的情況。代碼如下:
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<string>tagsList=newStateList<string>();
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<Category>list=newStateList<Category>();
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了:
///<summary>
///將提交過來的新隨筆表單內容保存到數據庫
///</summary>
[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方法”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。