【问题标题】:Same model instance for two partial views (ajax)两个局部视图的相同模型实例(ajax)
【发布时间】:2012-06-02 18:18:40
【问题描述】:

会发生什么:

  1. 局部视图 A 和 B 显示相同的模型
  2. 视图 A 通过 Ajax 更改数据(使用 Ajax.BeginForm
  3. 视图 A 重新渲染自身(控制器从数据库中获取更新后的模型)
  4. 现在我们也必须重新渲染视图 B,因为数据已更改,对吧?
  5. 我们再次从数据库中获取更新后的模型并重新渲染视图 B

如何防止重新查询数据库?也许在 Session 中缓存模型实例?

这样做的“正确”方法是什么?

<!--works great when the page is rendered
    via postback but what about Ajax?--!>
<div>
@Html.Partial(@ViewA", MyModelInstance)
@Html.Partial(@ViewB", MyModelInstance)
</div>

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    您能否创建一个包含 AB 的新局部 视图 C。每当模型发生变化时,您都必须调用返回 View C 的操作。

    更新:

    我看到的另一个简单的解决方案是当 View A 更新模型而不是重新渲染视图时,通过 AJAX 获取更新的模型并通过 javascript 更新 HTML 部分。如果您使用的是 jquery,您可以使用 模板插件 很容易地更新 html。 通过这种方式,您可以避免再次发出不必要的请求来更新另一个视图 B

    【讨论】:

    • 我不能,因为视图 ​​A 和 B 位于 HTML 的不同部分
    • 所以我需要在 C# 中创建一个剃须刀视图,并在像 Mustache 之类的模板语言中创建一个 JS 视图(复制代码)......这很糟糕,但好的。 PS。天哪,我非常想念网络表单 + 更新面板...
    • 我认为在正常请求的情况下,Razor 或任何其他服务器端模板都可以,但在 AJAX 请求的情况下,与部分视图相比,JS 模板会很有帮助。
    • 但是如果我们需要模板也应该在服务器端进行,重复代码是不可避免的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多