1
我有接口IInterface
并实现它自定义模型绑定在接口上返回空MODELNAME
我有一个观点
@model IEnumerable<IInterface>
@for (int i = 0; i < Model.Count(); i++)
{
@Html.EditorFor(x => x[i])
}
<span id="result"></span>
编辑模板Concrete.cshtml
@model Concrete
@Ajax.BeginForm("Action", new AjaxOptions { UpdateTargetId = "result" })
{
@Html.Hidden("ModelType", Model.GetType())
<input type="submit" />
}
与类Concrete
动作:
public string Action(IInterface interface) { return "success"; }
和模型绑定:
public class MyModelBinder : DefaultModelBinder
{
protected override CreateModel(
ControllerContext controllerContext,
ModelBindingContext bindingContext,
Type modelType)
{
var typeValue = bindingContext.ValueProvider.GetValue(
bindingContext.ModelName + ".ModelType"
);
...
我曾与一个ViewModel内IInterface
使用此之前,它工作得很好,但是,现在当我提出我的Ajax表单bindingContext.ModelName
是空的。
在调试器中检查ValueProvider
我可以看到它包含一个FormValueProvider
谁是_values
包含密钥。
使用立即窗口我可以确认调用.GetValue("[0].Interface.ModelType")
返回适当的typeValue
。
我怎么能得到bindingContext.ModelName
不是空的或我怎么能得到我需要的字符串"[0].Interface.ModelType"
?
岂不是更好的做法,以实现该接口为你的模型类型? – PlTaylor
你是什么意思? –
'@model IInterface'而不是'@model Concrete' – PlTaylor