你可以有一個自定義值提供商:
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;
}
}
和相應的工廠:
public class MyValueProviderFactory : ValueProviderFactory
{
public override IValueProvider GetValueProvider(ControllerContext controllerContext)
{
return new MyValueProvider();
}
}
將在Application_Start
註冊:
ValueProviderFactories.Factories.Add(new MyValueProviderFactory());
,現在你可以有一個控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new MyViewModel());
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
return View(model);
}
}
和視圖:
@model MyViewModel
@Html.DisplayFor(x => x.Name)
@Html.DisplayFor(x => x.IPAddress)
@using (Html.BeginForm())
{
<button type="submit">OK</button>
}
您的自定義值提供商將通過默認的模型綁定使用。
您註冊了您的自定義提供商工廠嗎? – Eranga
我想我有同樣的問題。 'GetValue' * only *似乎在我的請求包含任何其他屬性時調用待填充屬性(例如,在您的情況下:如果'name'將作爲路由參數或通過查詢字符串傳遞),但不包括任何參數。在這種情況下,我的控制器只接收'MyViewModel'的'null'。 'GetValue'被參數和一個空字符串的名稱調用,但不是用於待填充的屬性(在你的例子中是'IPAddress')。 你有沒有找到原因,也許是一個解決方案? –