【问题标题】:How to access MVC PartialView Model in Javascript?如何在 Javascript 中访问 MVC PartialView 模型?
【发布时间】:2015-06-04 16:04:08
【问题描述】:

为了通过 Javascript 访问视图模型,我可以使用

var additional = '@Html.Raw(Json.Encode(Model))';

但是从主视图看 Model of Partial view 怎么样?

我面临的问题是我通过 jQuery ajax 调用将部分视图加载到 Keno UI window 小部件中,在部分视图中我有 Upload widget 并且它有一些事件(即:onUpload 事件),如果我将onUpload 事件放在部分视图中,它无法识别它。所以我不得不把它放在主视图中。

在这种情况下'@Html.Raw(Json.Encode(Model))' 返回主视图的模型,而不是部分视图。

关于如何解决这个问题的任何想法?

【问题讨论】:

  • 如何在局部视图中加载?通过 JavaScript ajax 调用?还是通过@{ Html.RenderAction("YourView"); }
  • @scgough ,我通过 jquery ajax 调用加载

标签: javascript jquery asp.net-mvc kendo-ui asp.net-mvc-partialview


【解决方案1】:

这是我访问所有模型的方式:

 var model = function () { return @Html.Raw(Json.Encode(Model)) }();

局部视图有一个模型:

  @model SomeModel


  <script type="text/javascript">
     $(document).ready(function() {
        var model = function () { return @Html.Raw(Json.Encode(Model)) }();
      });
   </script>

【讨论】:

  • 谢谢Dean,但正如问题中提到的,它返回的是主视图的模型,而不是部分的。
【解决方案2】:

好的, 如果您通过 Ajax 调用加载 Partial 并且您想在 Partial 中启动 &lt;script&gt; 块,您可以在成功加载 Ajax 调用时运行以下 JS(在您将 Partial 的 HTML 放在父页面)。

var reponseScript = $(jqXHR.responseText).filter("script");
jQuery.each(reponseScript, function (idx, val) { eval(val.text); })

我假设您在那里使用 jQuery。它将运行任何 Partial 的 JavaScript 块。

【讨论】:

  • 谢谢,但是这段代码应该做什么?它是否会导致部分视图中的 java 脚本事件触发?因为当我尝试它时,它没有
  • 不,当部分加载到主视图中时,它应该只是“注册”它。然后该事件应按预期触发“onupload”。显然依赖于部分中的JS代码。这个想法是 JS 代码可以保留在部分视图中,并且通过 Ajax 加载它并不重要。我已经用过几次了。
猜你喜欢
  • 1970-01-01
  • 2019-03-03
  • 2014-04-25
  • 2014-02-18
  • 1970-01-01
  • 1970-01-01
  • 2013-04-28
  • 2012-03-10
  • 1970-01-01
相关资源
最近更新 更多