您的位置:首页 > 其它

MVC值提供组件和模型绑定组件

2016-03-24 20:44 447 查看
ASP.NET MVC使用DefaultModelBinder类(interface IModelBinder的默认实现)来绑定Model的数据。在传递Action参数的时候,ASP.NET MVC按照如下顺序查找匹配的数据:

form表单中的数据;

RouteData中的数据;

QueryString中的数据;

请求过程中中各组件调用顺序:值提供组件(IValueProvider)-》模型绑定组件(IModelBinder)-》模型验证组件

值提供组件接口

public interface IEnumerableValueProvider : IValueProvider
{
IDictionary<string, string> GetKeysFromPrefix(string prefix);
}

public interface IUnvalidatedValueProvider : IValueProvider
{
ValueProviderResult GetValue(string key, bool skipValidation);
}


值提供组件

1,NameValueCollectionValueProvider类
NameValueCollectionValueProvider具有两个继承者,即FormValueProvider和QueryStringValueProvider

public sealed class FormValueProvider : NameValueCollectionValueProvider{}

public sealed class QueryStringValueProvider: NameValueCollectionValueProvider{}


2,DictionnaryValueProvider/DictionaryValueProvider<TValue>类

NameValueCollection和Dictionnary都是一个键值对的集合,它们之间的不同之处在NameValueCollection运行元素具有相同的Key,Dictionnary却要求元素的Key具有唯一性!

DictionaryValueProvider<TValue>具有三个继承者,RouteDataValueProvider、HttpFileCollectionValueProvider、ChildActionValueProvider

public sealed RouteDataValueProvider : DictionaryValueProvider<object>{}

public sealed HttpFileCollectionValueProvider : DictionaryValueProvider<HttpPostedFileBase[]>{}

public sealed class ChildActionValueProvider : DictionaryValueProvider<object>{}


3,ValueProviderCollection类

类型ValueProviderCollection不仅仅表示一个ValueProvider对象的集合,还作为一个单纯的ValueProvider来使用

public class ValueProviderCollection : Collection<IValueProvider>, IUnvalidatedValueProvider, IEnumerableValueProvider, IValueProvider{}


4,通过FormCollection类读取表单数据

//.net
public sealed class FormCollection : NameValueCollection,
IValueProvider{}


//使用方式,控制器内
public ActionResult FormCollection(FormCollection formCollection)
{
string name=formCollection["name"];
}


public ActionResult FormCollection(FormCollection formCollection)
{
if (ModelState.IsValid)
{
var user = new User();
//利用控制器的TryUpdateModel方法,进行转换
TryUpdateModel<User>(user, formCollection);

}
}


参考:http://www.cnblogs.com/artech/archive/2012/05/17/value-provider-01.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: