자동으로 수행 될 수 있음을 알고 있습니다.
class Query
{
public int?[] Id { get; set; }
}
public ActionResult Index(Query q)
{
}
일부 QueryString /index?id=10&id=11
그것은 flawlessy 작동합니다.
그러나 일부 시나리오에서는 요청 만 가능합니다.
Reqest.RawUrl
기본 제공 구문 분석을 사용하여 쿼리 개체를 만들 수 있습니까?
Query q = SomeMagicStuff<Query>(Request.RawUrl);
네 가능합니다. MVC를 사용하는 경우 MVC를 사용할 수 있습니다 DefaultModelBinder
.이 경우에 대한 함수를 작성합니다.
public class MyModelBinder<T>
{
private ModelBindingContext modelBindingContext = new ModelBindingContext();
/// <summary>
/// Method to get model from QueryString
/// </summary>
/// <param name="request">HttpRequest</param>
/// <returns>T model</returns>
public static T GetModelFromQueryString(HttpRequest request)
{
modelBindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(null, typeof(T));
modelBindingContext.ValueProvider = new NameValueCollectionValueProvider(request.QueryString, System.Globalization.CultureInfo.InvariantCulture);
IModelBinder mb = new DefaultModelBinder();
return (T)mb.BindModel(new ControllerContext(), modelBindingContext);
}
/// <summary>
/// Method to get model from FormColletion
/// </summary>
/// <param name="request">HttpRequest</param>
/// <returns>T model</returns>
public static T GetModelFromFormColletion(HttpRequest request)
{
modelBindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(null, typeof(T));
modelBindingContext.ValueProvider = new NameValueCollectionValueProvider(request.Params, System.Globalization.CultureInfo.InvariantCulture);
IModelBinder mb = new DefaultModelBinder();
return (T)mb.BindModel(new ControllerContext(), modelBindingContext);
}
}
두 가지 방법이 있습니다. request.Params
및 와만 다릅니다 request.QueryString
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다