- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为我的模型中的复杂类型创建一些自定义绑定(bind)器。我的模型由具有自己独立的 Binder 的对象组成。我希望基础对象完成它的肮脏工作,然后通过传递给标准 ModelBinder 路由来填充它封装的复杂对象。我该怎么做?
为了便于说明,我创建了一个非常简单的示例。
假设我的模型包含这些对象。
public class Person
{
public string Name {get; set;}
public PhoneNumber PhoneNumber {get; set;}
}
public class PhoneNumber
{
public string AreaCode {get; set;}
public string LocalNumber {get; set;}
}
我为这些模型中的每一个都准备了以下 Binder 。并不是说 PersonBinder 需要填充 PhoneNumber 但不想复制 PhoneNumber Binder 中的代码。它如何委托(delegate)回标准的Binder路由?
public class PersonBinder: IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
Person person = new Person();
person.Name = bindingContext.ValueProvider.GetValue(String.Format("{0}.{1}", bindingContext.ModelName, "Name")).AttemptedValue
// This is where I'd like to have the PhoneNumber object use binding from another customer ModelBinder.
// Of course the bindingContext.ModelName should be updated to its current value + "PhoneNumber"
person.PhoneNumber = ???; // I don't want to explicitly call the PhoneNumberBinder it should go through standard Binding routing. (ie. ModelBinders.Binders[typeof(PhoneNumber)] = new PhoneNumberBinder();)
return person;
}
}
public class PhoneNumberBinder: IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
PhoneNumber phoneNumber = new PhoneNumber();
phoneNumber.AreaCode = bindingContext.ValueProvider.GetValue(String.Format("{0}.{1}", bindingContext.ModelName, "AreaCode")).AttemptedValue
phoneNumber.LocalNumber = bindingContext.ValueProvider.GetValue(String.Format("{0}.{1}", bindingContext.ModelName, "LocalNumber")).AttemptedValue
return phoneNumber;
}
}
当然,我已经在 Global.asax.cs 文件中注册了我的 ModelBinders。
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
ModelBinders.Binders[typeof(Person)] = new PersonBinder();
ModelBinders.Binders[typeof(PhoneNumber)] = new PhoneNumberBinder();
}
谢谢,
贾斯汀
最佳答案
好吧,我想出了一个解决方案。请随时对其有效性发表评论。
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
Person person = new Person();
person.Name = bindingContext.ValueProvider.GetValue("Name").AttemptedValue
if (bindingContext.ModelName == String.Empty)
{
bindingContext.ModelName = "PhoneNumber";
}
else
{
bindingContext.ModelName = bindingContext.ModelName + ".PhoneNumber";
}
PhoneNumber phoneNumber = new PhoneNumber();
bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => phoneNumber, phoneNumber.GetType());
IModelBinder binder = ModelBinders.Binders[typeof(PhoneNumber)];
if (binder == null)
{
binder = ModelBinders.Binders.DefaultBinder;
}
person.PhoneNumber = binder.BindModel(controllerContext, bindingContext) as PhoneNumber;
return person;
}
这是我所做的总结。
关于asp.net-mvc - 如何从自定义 ModelBinder 中调用 UpdateModel? (MVC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3183931/
通俗地说,UpdateModel()和TryUpdateModel()是做什么的?我似乎无法(在 SO 或网络上)找到任何关于它实际做什么的明确解释(用明确的术语),只是人们在使用它时遇到问题。 Vi
对于使用 EF4 在 ASP.NET MVC 3 中保存对我的编辑模型对象的更改的正确方法,我有点困惑,尤其是当我想在保存之前进行一些服务器端清理时。我的操作方法是: [HttpPost] publi
我有一个名为 S2kBool 的自定义对象,它可以与常规 bool 对象相互转换。基本上,它允许我的应用程序像对待 C# bool 值一样对待旧数据库中的 bool 值。那么问题是,当我尝试使用复选框
作为引用,这是在 C# MVC2 网站中。 我想在我的数据库中使用模型保存数据,但我需要使用自定义数据而不是我习惯的 FormCollection 来保存数据。以下是我通常的做法: TryUpdate
我创建了一个 ASP.NET MVC 5 应用程序,其以下模型类在其 Email 属性上使用了globalized Required validation 属性: public class Perso
我一直在努力阅读 Scott Guthrie 在 ASP.NET MVC Beta 1 上的精彩帖子。 .在其中,他展示了对 UpdateModel 方法的改进以及它们如何改进单元测试。我重新创建了一
我有一些关于 asp.net mvc 开发的简单问题。 UpdateModel 和 TryUpdateModel 有什么用?以及哪个条件适用于使用 UpdateModel 或 TryUpdateMod
尝试让 UpdateModel 为我的用户工作。 User 类具有基本的字符串属性,如 CompanyName、FirstName、LastName 等,因此没有什么奇怪的。 这是我的 View 的标
我正在寻找对在运行时检索的子类使用 UpdateModel 方法,如果有人能够阐明我是否正在对其进行总哈希和/或是否是我的内容,那就太好了我尝试做的事情是可能的。 我正在使用通用操作来控制一堆部分 V
假设您有一个看起来像这样的模型: public class MyClass { public string Name { get; set; } public DateTime MyD
是否有可能在 MVC Controller 中有效地做这样的事情: var vmObject = Activator.CreateInstance("A string representing the
我正在尝试通过调用 UpdateModel(myObject, new[] { "stringprop1", "stringprop2", "intprop"}) 来更新一些对象属性。 由于未知原因而
这个问题在这里已经有了答案: Do you ever need to specify 'javascript:' in an onclick? (8 个答案) 关闭 5 年前。 我经常看到带有指定
如何使用ASP.NET MVC UpdateModel执行以下操作?我试图在空间中读取限定的文本框数据(就像新的StackOverflow问题中的TAGS文本框,例如这样)到模型中。 例如。 ...
我想在不知道 View 类型的 Controller 中使用 updateModel。我有不同的 View ,它们具有不同的类型,但都有一个ExternalBase 类作为继承类型。 所以在我的 Co
我是 MVC 的新手,所以正在学习 NerdDinner 教程,here .特别是,我在使用 UpdateModel 方法时遇到了问题,该方法在该教程的第五部分中进行了解释。问题是,当我尝试使用 Up
鉴于以下模型, public class A { public string Name { get; set; } } public class B { public string A
我有一个类似于日历的 ASP.NET MVC 应用程序。根据 NerdDinner 示例,我正在使用 UpdateMethod() 更新编辑页面的结果 在我的应用程序中,某些事件是完全可定制的,而某些
我有一个关于如何让 MVC Controller 的 UpdateModel/TryUpdateModel 的白名单和黑名单功能处理子对象的各个属性的问题。例如,假设我有一份问卷,收集有关填写表格的人
我不确定这是 DefaultModelBinder 类中的错误还是什么。 但是 UpdateModel 通常不会更改模型的任何值,除了它找到匹配的值。 看看以下内容: [AcceptVerbs(Htt
我是一名优秀的程序员,十分优秀!