1

我正在迁移到 MVC 的旧 Web 窗体应用程序中有一堆代码。各种页面的某些部分需要由视图生成 HTML,然后通过 AJAX 调用重新生成。很多 HTML 非常复杂,因此将所有 html 生成集中在一个位置(最好是模板)确实很有帮助。

我的问题是,有没有更好的方法来解决这个问题?我应该使用部分视图还是什么?这将如何转化为 WebService 调用?我可以做一些更有效的事情吗?

基本上这就是我现在正在做的事情(这是一个非常基本的、糟糕的例子,所以我很抱歉):

伪代码中

标记

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

AJAX Javascripty 的东西

$(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);
      }
   }
}

我的网络服务

public string MyWebServiceMethod() {
    return StaticMethods.GetContent();
}
4

2 回答 2

2

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

如果你想要更独立的东西,你可以使用 MVC Future 的“RenderAction()”来使局部视图像调用常规操作一样。因此,“局部视图”不依赖于当前呈现的操作。

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

就个人而言,我会使用 RenderAction() 来进行页面的初始渲染。更新面板的 AJAX 调用将指向与 RenderAction 调用相同的操作。

麦克风

于 2010-01-05T04:26:50.217 回答
1

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

您只需调用从局部视图返回 HTML 的 url,而不是调用 WebService。

总之,您所要做的就是: 1. 在您的控制器中有一个返回局部视图的方法。2. 为您的 AJAX 调用调用该 URL。3. 完成!

于 2010-01-05T04:22:09.243 回答