Dictionary<string, string>
이 있는데 MVC의 모델 바인딩과 마찬가지로 사전의 값을 사용하여 개체를 업데이트하고 싶습니다. MVC가 없으면 어떻게할까요?mvc없이 모델 바인딩이 가능합니까?
1
A
답변
4
이 작업을 수행하려면 DefaultModelBinder를 사용할 수 있지만 System.Web.Mvc 어셈블리를 프로젝트에 참조해야합니다. 예를 들면 다음과 같습니다.
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using System.Linq;
using System.Web.Mvc;
public class MyViewModel
{
[Required]
public string Foo { get; set; }
public Bar Bar { get; set; }
}
public class Bar
{
public int Id { get; set; }
}
public class Program
{
static void Main()
{
var dic = new Dictionary<string, object>
{
{ "foo", "" }, // explicitly left empty to show a model error
{ "bar.id", "123" },
};
var modelState = new ModelStateDictionary();
var model = new MyViewModel();
if (!TryUpdateModel(model, dic, modelState))
{
var errors = modelState
.Where(x => x.Value.Errors.Count > 0)
.SelectMany(x => x.Value.Errors)
.Select(x => x.ErrorMessage);
Console.WriteLine(string.Join(Environment.NewLine, errors));
}
else
{
Console.WriteLine("the model was successfully bound");
// you could use the model instance here, all the properties
// will be bound from the dictionary
}
}
public static bool TryUpdateModel<TModel>(TModel model, IDictionary<string, object> values, ModelStateDictionary modelState) where TModel : class
{
var binder = new DefaultModelBinder();
var vp = new DictionaryValueProvider<object>(values, CultureInfo.CurrentCulture);
var bindingContext = new ModelBindingContext
{
ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => model, typeof(TModel)),
ModelState = modelState,
PropertyFilter = propertyName => true,
ValueProvider = vp
};
var ctx = new ControllerContext();
binder.BindModel(ctx, bindingContext);
return modelState.IsValid;
}
}
2
이렇게 할 수는 있지만 여전히 System.Web.Mvc를 참조해야합니다. ModelBinder를 구성하는 것은 아마도 DefaultModelBinder
일 것입니다. 그런 다음 적절한 인수로 호출하십시오.하지만 이러한 인수는 유감스럽게도 웹 시나리오와 매우 밀접하게 관련되어 있습니다.
정확히 무엇을 원 하느냐에 따라 자신의 간단한 리플렉션 기반 솔루션을 롤하는 것이 더 합리적 일 수 있습니다.
관련 문제
- 1. Silverlight에서 메서드에 데이터 바인딩이 가능합니까?
- 2. 모델 바인딩이 mvc1에서 작동하지 않습니다
- 3. 속성이있는 계층 적 데이터 바인딩이 가능합니까?
- 4. 컬렉션 항목에 대한 변수 바인딩이 가능합니까?
- 5. MVC없이 Spring에서 REST 사용하기
- 6. MVC없이 무한 URL을 만드시겠습니까?
- 7. ASP.NET MVC없이 MicrosoftAjax.js 및
- 8. 비동기 Django 모델 쿼리가 가능합니까?
- 9. asp.net mvc 사용자 정의 모델 바인딩이 실패합니다.
- 10. 웹 서비스 메소드에서 모델 바인딩이 있습니까?
- 11. 모델 바인딩이 필터보다 먼저 발생하는 이유
- 12. 모델 삽입 후 함수 바인딩이 설정되지 않습니다.
- 13. 모델 바인딩이 작동하지 않습니다 - MVC 3
- 14. 모델 바인딩이 적절한 데이터를 제공하면서 오류를 표시합니다.
- 15. Spring MVC없이 포틀릿에서 Spring 사용하기
- 16. WCF의 들어오는 포트 중 하나와 이중 바인딩이 가능합니까?
- 17. Entity Framework 및 WPF DataGrid와의 양방향 데이터 바인딩이 가능합니까?
- 18. MVVM ..을 사용하는 WPF Datagrid는 DataTable에 대한 양방향 바인딩이 가능합니까?
- 19. 대괄호가있는 MVC 모델 속성 이름 - 이것이 가능합니까?
- 20. mvc없이 Zend_auth. 어떻게 사용자 데이터를 얻는가
- 21. ServiceStack은 MVC없이 면도기 인텔리 센스 지원을 설정합니다.
- 22. ASP.NET MVC없이 WebAPI를 사용하는 방법은 무엇입니까?
- 23. MVC 3 JSON 모델 바인딩이 객체를 생성하지 않음
- 24. ASP.Net MVC 2 : viewmodel을 사용하면 모델 바인딩이 손상됩니다.
- 25. ASP.NET MVC 1.0에서 모델 바인딩이 실패 할 수있는 원인은 무엇입니까?
- 26. ASP.Net 웹 API 모델 바인딩이 MVC 3 에서처럼 작동하지 않습니다.
- 27. MVC 모델 viewmodel 요소를 정렬 할 때 바인딩이 실패합니다.
- 28. MVC4 webapi의 비 직렬화/모델 바인딩이 배열에서 작동하지 않습니다.
- 29. ASP.NET MVC 3 컬렉션에 대한 모델 바인딩이 작동하지 않습니다.
- 30. jQuery를 바인딩이
예. 더 구체적으로 말하십시오. 무엇을 성취하고 싶습니까? 프레임 워크를 사용하지 않고 사전을 객체에 매핑. 비 MVC 시나리오에서 System.Web.Mvc에있는 modelbinder를 다시 사용하십니까? 다른 것 ? – driis
예 : System.Web.Mvc에있는 modelbinder를 non-mvc 시나리오에서 다시 사용하십시오. –