【问题标题】:Passing object to partial view using ViewData使用 ViewData 将对象传递给局部视图
【发布时间】:2016-03-29 22:03:52
【问题描述】:

我将为我的应用程序构建一个使用许多向导的助手。 在我看来,有一个简单的调用:

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

MyHelperHtmlHelper 的一个自己的实现,它具有封装为属性的原始帮助对象。

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

问题是,我怎样才能传递wiz-object?

EditWizard() 中,我正在尝试将向导添加到ViewData

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

但是,在我看来,ViewData-dictionary 始终是空的。目前我尝试使用

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

wiz 始终是null

【问题讨论】:

  • EditWizard 如何查看 ViewData?
  • 原来的HtmlHelper 是我的自定义助手的一部分。 myHelper.HtmlInternal 是原始的 HtmlHelper 对象。

标签: c# asp.net-mvc razor viewdata


【解决方案1】:

我们使用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} }) 似乎有效。但是,我仍然不明白为什么在助手中添加它不起作用
【解决方案2】:

我最终使用了

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

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

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

有什么理由永远不应该使用它还是合法的?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-13
    • 2019-04-01
    • 2010-12-20
    • 2013-12-19
    • 1970-01-01
    • 2014-11-09
    • 2019-02-01
    • 1970-01-01
    相关资源
    最近更新 更多