Любые идеи, что лучший способ будет обновить блок сложного сгенерированного представления HTML через AJAX в MVC? - PullRequest
1 голос
/ 05 января 2010

У меня есть куча кода в моем старом приложении Web Forms, которое я перехожу на MVC. Существуют разделы на разных страницах, для которых необходимо, чтобы HTML генерировался представлением, а затем восстанавливался с помощью вызова AJAX. Большая часть этого HTML довольно сложна, поэтому она действительно помогает сохранить все поколения HTML в одном месте (предпочтительно шаблон).

Мой вопрос: есть ли лучший подход к этому? Должен ли я использовать частичные представления или что-то? Как бы это перевести на вызов WebService? Есть ли что-нибудь более эффективное, что я мог бы сделать?

По сути, это то, что я делаю сейчас (это очень простой, дрянной пример, поэтому я прошу прощения):

In Псевдокод :

Разметка

<!--- 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);
      }
   }
}

MyWebservice

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

Ответы [ 2 ]

2 голосов
/ 05 января 2010

Вы можете использовать частичные представления. Но помните, что вы должны передать данные в частичное представление. Если ваше частичное представление используется везде, оно может быть сложным.

Если вы хотите что-то более независимое, вы можете использовать функцию RenderAction () MVC Future, чтобы частичное представление действовало как вызов обычному действию. Таким образом, «частичное представление» не зависит от текущего выполняемого действия.

Смотрите разницу здесь: http://blogs.intesoft.net/post/2009/02/renderaction-versus-renderpartial-aspnet-mvc.aspx

Лично я бы использовал RenderAction () для первоначального рендеринга страницы. Вызовы AJAX для обновления панели будут указывать на то же действие вызова RenderAction.

Mike

1 голос
/ 05 января 2010

Я бы абсолютно использовал частичные представления для контента, который должен быть обновлен через AJAX. Это сделает вашу жизнь намного проще.

Вместо того, чтобы вызывать WebService, вы просто вызываете URL, который возвращает HTML из частичного представления.

Таким образом, все, что вам нужно сделать, это: 1. В вашем контроллере есть метод, который возвращает частичное представление. 2. Назовите этот URL для вашего вызова AJAX. 3. Готово!

...