Как создать панель обновления в Framework ASP.NET Model-View-Contoller (MVC)?
Как сделать панель обновления в ASP.NET MVC
Ответ 1
Вы можете использовать частичный вид в ASP.NET MVC для получения аналогичного поведения. Частичный вид все еще может создавать HTML на сервере, и вам просто нужно подключить HTML в нужное место (на самом деле, помощники MVC Ajax могут установить это для вас, если вы захотите включить библиотеки MSFT Ajax).
В главном представлении вы можете использовать форму Ajax.Begin для настройки асинхронного запроса.
<% using (Ajax.BeginForm("Index", "Movie",
new AjaxOptions {
OnFailure="searchFailed",
HttpMethod="GET",
UpdateTargetId="movieTable",
}))
{ %>
<input id="searchBox" type="text" name="query" />
<input type="submit" value="Search" />
<% } %>
<div id="movieTable">
<% Html.RenderPartial("_MovieTable", Model); %>
</div>
Частичный просмотр инкапсулирует секцию страницы, которую вы хотите обновить.
<%@ Control Language="C#" Inherits="ViewUserControl<IEnumerable<Movie>>" %>
<table>
<tr>
<th>
Title
</th>
<th>
ReleaseDate
</th>
</tr>
<% foreach (var item in Model)
{ %>
<tr>
<td>
<%= Html.Encode(item.Title) %>
</td>
<td>
<%= Html.Encode(item.ReleaseDate.Year) %>
</td>
</tr>
<% } %>
</table>
Затем настройте действие вашего контроллера для обработки обоих случаев. Результат частичного представления хорошо работает с запросом asych.
public ActionResult Index(string query)
{
var movies = ...
if (Request.IsAjaxRequest())
{
return PartialView("_MovieTable", movies);
}
return View("Index", movies);
}
Надеюсь, что это поможет.
Ответ 2
В принципе, "традиционные" серверные элементы управления (включая ASP.NET AJAX) не будут работать из коробки с MVC... жизненный цикл страницы очень отличается. С помощью MVC вы обрабатываете поток Html намного больше, чем поле абзаца/псевдо-состояния, которое WebForms завершает.
Чтобы "имитировать" UpdatePanel в MVC, вы можете рассмотреть возможность заполнения <DIV>
с помощью jQuery для достижения аналогичного результата. Действительно простой пример, доступный только для чтения, находится на на этой странице поиска
HTML прост:
<input name="query" id="query" value="dollar" />
<input type="button" onclick="search();" value="search" />
Данные для "панели" находятся в формате JSON - MVC может сделать это автоматически, просмотрев NerdDinner SearchController.cs
public ActionResult SearchByLocation(float latitude, float longitude) {
// code removed for clarity ...
return Json(jsonDinners.ToList());
}
и jQuery/javascript тоже
<script type="text/javascript" src="javascript/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
// bit of jquery help
// http://shashankshetty.wordpress.com/2009/03/04/using-jsonresult-with-jquery-in-aspnet-mvc/
function search()
{
var q = $('#query').attr("value")
$('#results').html(""); // clear previous
var u = "http://"+location.host+"/SearchJson.aspx?searchfor=" + q;
$("#contentLoading").css('visibility',''); // from tinisles.blogspot.com
$.getJSON(u,
function(data){
$.each(data, function(i,result){
$("<div/>").html('<a href="'+ result.url+'">'+result.name +'</a>'
+'<br />'+ result.description
+'<br /><span class="little">'+ result.url +' - '
+ result.size +' bytes - '
+ result.date +'</span>').appendTo("#results");
});
$("#contentLoading").css('visibility','hidden');
});
}
</script>
Конечно, UpdatePanel можно использовать в гораздо более сложных сценариях, чем это (он может содержать INPUTS, поддерживает ViewState и триггеры для разных панелей и других элементов управления). Если вам нужна такая сложность в вашем приложении MVC, я боюсь, что вы можете задуматься о какой-то пользовательской разработке...
Ответ 3
Если вы новичок в asp.mvc, я рекомендую вам загрузить NerdDinner (источник) пример приложения. Вы найдете там достаточно информации, чтобы начать эффективно работать с mvc. У них также есть примеры ajax. Вы узнаете, что вам не нужна и обновите панель.
Ответ 4
Это одно из лучших и простых учебных пособий по внедрению Updatepanel в ASP.NET MVC