gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 18:19:03 33 4
gpt4 key购买 nike

在我的 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/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com