如何将 http 请求转换为正确的对象?
在我的 ASP.Net MVC3 项目中,我创建了一个绑定基本模型的 ModelBinder。在我的视图中,我从继承自基本模型的模型创建一个对象。现在我想知道当我按下提交按钮时,哪个模型是通过 ModelBinder 中的反射创建的,但是如何呢?
ModelBinder:
public class MBTestBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
//need to know which Model was created -> convert into the right object
//reflection?
}
}
Models:
[ModelBinder(typeof(MBTestBinder))]
public class MBTest
{
public string Name { get; set; }
public MBTest() {}
}
public class MBAbl : MBTest
{
public MBAbl() {}
public string House { get; set; }
}
View:
@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);
}
edit:
使用 bindingContext.ValueProvider.GetValue("House")
我可以获取表单的值,但 bindingContext.ModelType
认为我的模型是MBTest
In my ASP.Net MVC3 project I have created a ModelBinder which binds a basemodel. In my View i create a object from a Model that inherit from my basemodel. Now i wan´t to know which Model was created via reflection in my ModelBinder when i press the submit-button, but how?
ModelBinder:
public class MBTestBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
//need to know which Model was created -> convert into the right object
//reflection?
}
}
Models:
[ModelBinder(typeof(MBTestBinder))]
public class MBTest
{
public string Name { get; set; }
public MBTest() {}
}
public class MBAbl : MBTest
{
public MBAbl() {}
public string House { get; set; }
}
View:
@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);
}
edit:
with bindingContext.ValueProvider.GetValue("House")
i can get the value of the Form but bindingContext.ModelType
thinks that my Model is MBTest
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
查看 ModelBindingContext 文档。
根据评论进行编辑
Check the ModelBindingContext documentation.
Edited based on comments
最后,我通过在模型中携带模型名称并在模型绑定器中动态创建正确的模型的解决方法解决了这个问题。
如果您知道更好的解决方案,请告诉我:-)
HomeController:
Models:
ModelBinder:
Finaly i solved it with the workaround of carrying the name of the model in my model and dynamically create the right model in the modelbinder.
If you know a better solution plz show me :-)
HomeController:
Models:
ModelBinder:
试试这个:
Try this: