- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 MVC,我有一个 Controller 操作可以处理多个不同的 View 模型,每个 View 模型都有验证,我希望 Controller 检查验证。
这是我的 Controller Action :
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult WizardCaseResult(FormCollection fc)
{
ViewA vm = new ViewA();
TryUpdateModel<ViewA>(vm);
}
我如何更改此代码以便可以像这样动态设置 View 模型的类型:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult WizardCaseResult(FormCollection fc, string ViewType)
{
ViewType vm = new ViewType();
TryUpdateModel<ViewType>(vm);
}
我可能会有很多不同的 View 模型,所以对每种类型采取不同的操作是不可能的。
最佳答案
您需要编写一个自定义模型 Binder 才能使其工作:
public class MyModelBinder : DefaultModelBinder
{
protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType)
{
var typeValue = bindingContext.ValueProvider.GetValue("viewType");
var type = Type.GetType(
(string)typeValue.ConvertTo(typeof(string)),
true
);
var model = Activator.CreateInstance(type);
bindingContext.ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => model, type);
return model;
}
}
然后:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult WizardCaseResult([ModelBinder(typeof(MyModelBinder))]object model)
{
...
}
现在您所要做的就是确保表单发送 ViewType
参数,该参数将指向您要实例化的 View 模型。
哦,在处理仅在运行时已知的类型时,您可以忘记像下面这样的强类型:
ViewType vm = new ViewType();
TryUpdateModel<ViewType>(vm);
您可能还会找到 following answer有帮助。
关于c# - 创建未知类型对象的实例和 TryUpdateModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9605930/
我正在使用 MVC,我有一个 Controller 操作可以处理多个不同的 View 模型,每个 View 模型都有验证,我希望 Controller 检查验证。 这是我的 Controller Ac
我能够让以下代码在服务器上运行,但不能在单元测试中运行。在单元测试中,简单属性设置正确,但子对象设置不正确。我已经用头撞墙太久了,所以欢迎任何建议。 Controller : [HttpPost] p
在我的查询字符串中,我得到了一堆参数名称和值。据我所知,我应该使用内置的 asp.net mvc 函数 TryUpdateModel(modelInstance)。 似乎它没有像我预期的那样工作。我的
有没有什么方法可以让 UpdateModel 或 TryUpdateModel 将货币或货币格式的值(例如 $1,200.00)解析为小数而不用大块? 最佳答案 使用自定义模型 Binder 。 An
VS2012、.NET 4.51 我有一个用户控件,其中包含一个使用模型绑定(bind)的 ListView。到目前为止,一切都很好。我想根据用户如何操作 View 模式来显示对象列表。为此,我有一个
我一直在使用 MVC4,我只需调用 TryUpdateModel(); 即可将我的实体更新到数据库 例子(MVC4) public ActionResult Edit(User user) {
在 MVC2 中,我曾经以一种在发布时从未使用过 FormCollection 对象的方式创建强类型 View 。我的签名总是这样: [AcceptVerbs(HttpVers.Post)] publ
我有基于 ASP.Net MVC3 的 Web 应用程序。我需要一个“创建” View ,在用户从下拉列表中选择要创建的子类型之前,该 View 不会知道模型类型。为了尝试解决这个问题,我在 Shar
在我的 Action 中,当我使用 TryUpdateModel 时出现 System.MissingMethodException 类型的错误。我在我的 Controller 中的几个地方使用它没有
我目前正在尝试测试使用 TryUpdateModel() 的插入方法。我正在伪造所需的 controllercontext,虽然它有效但似乎没有发布我设置的模型。 这是我正在测试的方法: [Acce
我有一些关于 asp.net mvc 开发的简单问题。 UpdateModel 和 TryUpdateModel 有什么用?以及哪个条件适用于使用 UpdateModel 或 TryUpdateMod
我知道你们大多数人会建议我应该使用特定于我正在使用的表单的 ViewModel,但我很好奇为什么我的子对象没有绑定(bind)到 TryUpdateModel。 @using (Html.BeginF
假设我们有一个名为 PetsName 的属性的类。如果它在屏幕上留空,我想更新值提供者,因此如果用户没有输入宠物名称,我们会强制使用“未命名”。这不是实际情况.. 这当然是一个示例,因此诸如“仅在网页
我在网络表单中有一个简单的表单 View 和简单的模型绑定(bind): ' runat="server">
这个有效: public ActionResult Save(int id, string name) { var profile = _profileRepository.GetById(i
给定以下 ASP.NET MVC Controller 代码: [HttpPost] public ActionResult Create(FormCollection collect
TryUpdateModel 是 System.Web.Mvc 中的方法之一,但我需要在没有此库的 Windows 应用程序中使用它。EF 中的任何类似方法或其他建议,以便我可以更新实体而无需将字段与
我似乎无法找到一个基本的代码示例来了解 TryUpdateModel 的工作原理?你什么时候使用它,为什么? 最佳答案 您可以使用此方法通过给定 Controller 更新支持特定 View 的模型。
我不明白,如何使用TryUpdateModel并同时保存MVC架构。 如果我没记错的话,数据上下文的工作必须在模型中进行。所以,这样的代码 var db=new TestEverybody();//i
我正在为 RC1 中的 Controller 编写一些单元测试。这里是我正在测试 Controller 的公共(public)签名: [AcceptVerbs(HttpVerbs.Po
我是一名优秀的程序员,十分优秀!