Любые идеи, что лучший способ будет обновить блок сложного сгенерированного представления HTML через AJAX в MVC?
У меня есть куча кода в моем старом приложении Web Forms, которое я перехожу на MVC. Существуют разделы на различных страницах, для которых необходимо, чтобы 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);
}
}
}
MyWebservice
public string MyWebServiceMethod() {
return StaticMethods.GetContent();
}
2 ответа
Вы можете использовать частичные представления. Но помните, что вы должны передать данные в частичное представление. Если ваше частичное представление используется везде, оно может быть сложным.
Если вы хотите что-то более независимое, вы можете использовать функцию RenderAction() MVC Future, чтобы частичное представление действовало как вызов обычному действию. Таким образом, "частичное представление" не зависит от текущего выполняемого действия.
Смотрите разницу здесь: http://blogs.intesoft.net/post/2009/02/renderaction-versus-renderpartial-aspnet-mvc.aspx
Лично я бы использовал RenderAction() для первоначального рендеринга страницы. Вызовы AJAX для обновления панели будут указывать на то же действие вызова RenderAction.
Майк
Я бы абсолютно использовал частичные представления для контента, который должен быть обновлен через AJAX. Это сделает вашу жизнь намного проще.
Вместо того, чтобы вызывать WebService, вы просто вызываете URL, который возвращает HTML из частичного представления.
Таким образом, все, что вам нужно сделать, это: 1. В вашем контроллере есть метод, который возвращает частичное представление. 2. Назовите этот URL для вашего вызова AJAX. 3. Готово!