代码之家  ›  专栏  ›  技术社区  ›  Ben Lesh

有什么想法最好的方法是在MVC中通过Ajax更新复杂视图生成的HTML块吗?

  •  1
  • Ben Lesh  · 技术社区  · 15 年前

    我的旧web表单应用程序中有很多代码,我正在迁移到MVC。不同页面的某些部分需要由视图生成HTML,然后通过Ajax调用重新生成。很多这种HTML相当复杂,因此将所有HTML生成都放在一个位置(最好是一个模板)确实有帮助。

    我的问题是,有没有更好的办法?我应该使用局部视图还是什么?如何将其转换为WebService调用?我能做些更有效率的事吗?

    基本上,这就是我现在所做的(这是一个非常基本的,蹩脚的例子,所以我道歉):

    伪码 :

    标记

    <!--- some html here -->
    <div id="myContent">
      <%=StaticMethods.GetContent()%>
    </div>
    <button id="btnUpdate">Update</button>
    <!--- some html here -->
    

    Ajax JavaScript的东西

    $(document).ready(function() {
       $('#btnUpdate').click(function() {
          $.ajax({
             url:'MyService.asmx/MyWebServiceMethod',
             /*crap here*/
             success: function(result, status, code) {
                $('#myContent').html(result);
             }
          });
       });
    });
    

    静态方法

    public static class StaticMethods {
       public static string GetContent() {
          var sb = new StringBuilder();
          var somethings = GetSomeRandomThings(); 
          //just an example. it's normally much more complex.
          foreach(var something in somethings) {
              sb.AppendFormat("<li>{0}</li>",something.Name);
          }
       }
    }
    

    MyWebService

    public string MyWebServiceMethod() {
        return StaticMethods.GetContent();
    }
    
    2 回复  |  直到 15 年前
        1
  •  2
  •   Mike Gleason jr Couturier    15 年前

    可以使用局部视图。但请记住,必须将数据传递给分部视图。如果局部视图在任何地方都使用,它可能会很复杂。

    如果您想要更独立的东西,可以使用MVC Future的“renderAction()”使局部视图的行为类似于对常规操作的调用。因此“局部视图”不依赖于当前正在呈现的操作。

    请看这里的区别: http://blogs.intesoft.net/post/2009/02/renderaction-versus-renderpartial-aspnet-mvc.aspx

    就个人而言,我将使用renderAction()进行页面的初始呈现。更新面板的Ajax调用将指向renderAction调用的相同操作。

    迈克

        2
  •  1
  •   Esteban Araya    15 年前

    对于需要通过Ajax更新的内容,我绝对会使用部分视图。这会让你的生活轻松很多。

    与调用WebService不同,您只需调用从部分视图返回HTML的URL。

    总之,你要做的就是: 1。在控制器中有一个返回局部视图的方法。 2。调用该URL进行Ajax调用。 三。完成!

    推荐文章