【问题标题】:Can we assign a ViewModel to a ViewData object in ASP.Net MVC?我们可以将 ViewModel 分配给 ASP.Net MVC 中的 ViewData 对象吗?
【发布时间】:2014-10-13 10:40:52
【问题描述】:

这个问题看起来很奇怪,但我正在使用 DevExpress 库,我需要通过 DevExpress BeginCallback 事件将我自己的对象(视图模型)发送到控制器操作。

基本上我有一个简单而高级的搜索,简单的搜索可以完美地工作,因为它只是一个字符串值

    [ValidateInput(false)]
    [Authorize]
    public ActionResult DevExpressGridView(string simple, AdvanceSearch adv)
    {
          ViewData["data"] = simple;
         ..Search Logic
    }

因此,当填充 Gridview 时,我想双击一行以从数据库中获取项目

    function CallBack(s, e) {

        e.customArgs['simple'] = "@ViewData["data"]";
    }

最后是 Gridview Action 方法

  @Html.Action("DevExpressGridView", new { simple = @ViewData["data"] })

但是如果用户想要做一个AdvanceSearch,它是我自己的ViewModel,我怎么能通过回调把数据发回呢?如果可能的话?

    [ValidateInput(false)]
    [Authorize]
    public ActionResult DevExpressGridView(string simple, AdvanceSearch adv)
    {
          ViewData["data"] = adv;
         // Its my own type so it can't work can it?
    }

我会询问 DevExpress 支持团队,但我仍在获得许可证,所以在那之前他们不会提供帮助

提前致谢

【问题讨论】:

    标签: c# asp.net-mvc devexpress-mvc


    【解决方案1】:

    ViewDataViewDataDictionary 类型,它实现了 IDictionary<string,object>,正如您从 relevant msdn documentation page 中看到的那样。所以你可以在其中存储任何类型的对象,尽管我个人更喜欢在大多数情况下返回一个视图模型。

    【讨论】:

    • 谢谢,我完全同意,但是如何通过@Html.Action 方法将 Viewmodel 发回? @Html.Action("DevExpressGridView", new { simple = "TEST", Model }) 模型只是重新初始化数据,我需要将视图模型中的当前数据返回
    • 假设视图的模型类型是AdvanceSearch,你试过@Html.Action("DevExpressGridView", new { simple = "TEST", adv = Model })吗?
    • 而不是 adv = model 将是 adv =ViewData["..."] 对吗?
    • 如果您使用的是ViewData,是的,但您可能需要将其转换为AdvanceSearch
    • 我可以在视图中执行此操作吗? (剃刀)
    猜你喜欢
    • 2010-11-19
    • 2011-07-07
    • 2015-09-18
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多