首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >递归模型绑定与自定义模型绑定

递归模型绑定与自定义模型绑定
EN

Stack Overflow用户
提问于 2012-08-02 10:26:31
回答 2查看 651关注 0票数 2

我正在尝试使用.NET MVC在我的表单中实现向导功能。我看到了达林·季米特洛夫的实现方法。基本上,他有一个向导视图模型,其中包含一个ISteps列表。每个步骤都有自己的属性和验证。

他在视图上序列化向导(作为一种视图状态),然后将该向导和当前步骤发布到控制器。因此,向导的每一步都只验证该步骤。如果成功,增加当前步骤并重复。

在大多数情况下,这是很好的工作。但是,我在验证各个步骤时遇到了一个问题,因为我的一些步骤依赖于以前提交的值来进行验证。

因此,我需要添加一种方法来允许各个向导步骤访问前面的步骤。

我决定这样做的方法是在步骤中包括向导。

代码语言:javascript
复制
public interface IWizardStep
{
    WizardViewModel Wizard { get; set; }
}

然后在所提供的模型绑定器Darin中,为BindModel添加一个覆盖

代码语言:javascript
复制
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
    var step = (IStepViewModel)base.BindModel(controllerContext, bindingContext);
    step.Wizard = (WizardViewModel)serializer.Deserialize(controllerContext.HttpContext.Request.Form["wizard"], SerializationMode.Signed);
    return step;
}

这似乎是可行的,但是在我的控制器中,我有一个ModelStateError:

类型“System.String”到类型“向导”之间的参数转换失败,因为无法在这些类型之间进行转换。

我认为这是由于模型绑定试图递归地绑定吗?

有人知道我怎么能解决这个问题吗?或者-我的做法正确吗?有更好的方法吗?

我已经把以上所有的都是一个基本样本工程来说明我的问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-04 18:21:54

因此,我从来没有弄清楚为什么这不起作用,但我决定省去头痛,并在会话中保存向导,而不是序列化和张贴它的每一步。这样,我就可以很容易地在视图模型的验证(ValidationContext)方法中获得向导。似乎效果很好。

票数 0
EN

Stack Overflow用户

发布于 2012-08-02 12:41:50

将这个添加到您的HomeController中作为第18行..。

代码语言:javascript
复制
ModelState.Remove("Wizard");

您所拥有的应该工作,但更好的方法可能是将步骤的所有属性添加到单个模型类中,然后为每个步骤使用验证组。

https://nuget.org/packages/Mvc3ValidationGroups

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11775581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档