사용자 지정 값을 제공 할 수 :
public class MyValueProvider : IValueProvider
{
public bool ContainsPrefix(string prefix)
{
return true;
}
public ValueProviderResult GetValue(string key)
{
if (key.EndsWith("Name"))
{
var value = "john";
return new ValueProviderResult(value, value, CultureInfo.InvariantCulture);
}
else if (key.EndsWith("IPAddress"))
{
var value = "127.0.0.1";
return new ValueProviderResult(value, value, CultureInfo.InvariantCulture);
}
return null;
}
}
및 해당 공장 :
Application_Start
에 등록됩니다
public class MyValueProviderFactory : ValueProviderFactory
{
public override IValueProvider GetValueProvider(ControllerContext controllerContext)
{
return new MyValueProvider();
}
}
:
ValueProviderFactories.Factories.Add(new MyValueProviderFactory());
을 지금 당신은 할 수 있습니다 컨트롤러 :
및 전망 :
@model MyViewModel
@Html.DisplayFor(x => x.Name)
@Html.DisplayFor(x => x.IPAddress)
@using (Html.BeginForm())
{
<button type="submit">OK</button>
}
귀하의 사용자 정의 값 공급자가 기본 모델 바인더에 의해 사용됩니다.
사용자 지정 값 공급자 팩토리를 등록 했습니까? – Eranga
나는 같은 문제가 있다고 생각한다. 'GetValue' * only *는 내 요청에 다른 속성이 포함될 때 to-be-populated-property를 호출하는 것처럼 보입니다 (예 : 귀하의 경우 :'name'이 라우트 매개 변수 또는 쿼리 문자열을 통해 전달 될 경우).). 그러나 요청에 매개 변수가 들어 있지 않은 경우에는 적용되지 않습니다. 이 경우 컨트롤러는 MyViewModel에 대해 'null'을받습니다. 'GetValue'는 매개 변수의 이름과 빈 문자열로 호출되지만, 채워지는 속성 (예제에서는'IPAddress')이 아닙니다. 이유와 해결책을 찾았습니까? –