asp.net-mvc - 如何将 http-request 转换为正确的对象?

标签 asp.net-mvc asp.net-mvc-3 c#-4.0 razor modelbinder

在我的 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-request 转换为正确的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6337246/

相关文章:

asp.net - 如何在Asp.net mvc中获取请求处理时间?

c# - 扩展 Entity Framework 的工作单元

c# - 批量插入的 LINQ-to-SQL 性能问题

c# - 转换字典以供 javascript 使用

javascript - 如何在不使用 EF 的情况下向我的实体添加上下文元数据?

asp.net-mvc - MVC 框架做了什么来避免它从大量使用反射中继承的低性能

c# - 使用动态表达式 API 时验证 ASP.NET MVC 3 Controller 的操作参数

asp.net-mvc - 向 Sharp Architecture 注册自定义模型绑定(bind)器

c# - 是否可以使用 C# 4 中的动态方法在每次调用时返回不同的数据类型?

c# - 在 C# 中的 lambda 表达式中应用多个条件