在我的 ASP.Net MVC3 项目中,我创建了一个绑定(bind)基础模型的 ModelBinder。在我的 View 中,我从从我的基础模型继承的模型创建了一个对象。现在我不想知道当我按下提交按钮时通过我的 ModelBinder 中的反射创建了哪个模型,但是如何?

模型绑定(bind)器:

public class MBTestBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        //need to know which Model was created -> convert into the right object
        //reflection?
    }
}

楷模:
[ModelBinder(typeof(MBTestBinder))]
public class MBTest
{
    public string Name { get; set; }
    public MBTest()  {}
}

public class MBAbl : MBTest
{
    public MBAbl()  {}
    public string House { get; set; }
}

看法:
@model ModelBinderProject.Models.MBTest

@using (Html.BeginForm("Index", "Home")) {
<fieldset>
    <div class="editor-field">
        @Html.EditorForModel(Model)
    </div>
    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>

Controller :
public ActionResult Create(MBTest testItem)
{
    //on init get a view from a class that hast inherit the class MBTest
    if (testItem.Name == null ) testItem = new MBAbl();

    return View(testItem);
}

编辑:

使用 bindingContext.ValueProvider.GetValue("House") 我可以获得表单的值,但 bindingContext.ModelType 认为我的模型是 MBTest

最佳答案

检查 ModelBindingContext 文档。

根据评论编辑

public class MBTestBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var result = bindingContext.ValueProvider.GetValue("Name");

        if (result == null || string.IsNullOrEmpty(result.AttemptedValue))
           return new MBAbl();
        else
           return new MBTest();
    }
}

关于asp.net-mvc - 如何将 http 请求转换为正确的对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6337246/

10-13 02:00