使用ViewData传递对象到部分视图

3

我将为我的应用程序创建一个助手,该应用程序使用许多向导。对于我的视图,只需简单调用:

@using (var wiz = MyHelper.EditWizard(Translate(Keys.User.ChangePasswordTitle)))
{
    // RenderPartial(...)       
}

MyHelper 是一个自己实现的 HtmlHelper,其中原始的帮助对象封装为一个属性。

由于向导可以包含多个步骤,因此内容可以分成多个部分视图。变量 wiz 具有我需要在部分视图中访问的一些公共方法。

问题是,如何传递 wiz 对象?

EditWizard() 内部,我试图将向导添加到 ViewData 中。

myHelper.HtmlInternal.ViewData["currentWizard"] = theWizard;

然而,我的局部视图中,ViewData字典总是为空的。目前我尝试通过以下方式获取数据:

var wiz = (Wizard)ViewData["currentWizard"];

但是wiz始终为null

ViewData 如何能被 EditWizard 看到? - Mr. B
原始的 HtmlHelper 是我的自定义助手的一部分。myHelper.HtmlInternal 是原始的 HtmlHelper 对象。 - KingKerosin
2个回答

5
我们使用HtmlHelper.Partial,它的第二个参数是一个对象模型:
@Html.Partial("YourWizardOrWhatever", wiz)

在这种情况下,Wiz作为局部视图的模型提供。您也可以将整个模型转发:

@Html.Partial("YourWizardOrWhatever", Model)

或者您可以使用匿名类型来创建仅有几个参数:

@Html.Partial("YourWizardOrWhatever", new { step = Model.Step, answer = Model.LastAnswerOrSomething })

@Html.Partial("ChangePassword/_Password", Model, new ViewDataDictionary { {"wiz", wiz} }) 看起来是有效的。但是,我仍然不明白为什么将其添加到帮助程序中不起作用。 - KingKerosin

-1

我最终使用了

myHelper.HtmlInternal.ViewContext.HttpContext.Items["currentWizard"] = theWizard;

在我的辅助方法中,反之亦然,在我的部分视图中

var wiz = (Wizard)ViewContext.HttpContext.Items["currentWizard"]

有没有什么原因,这个东西永远不应该被使用,或者它是合法的?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接