Подтвердить что ты не робот

Как сделать панель обновления в ASP.NET MVC

Как создать панель обновления в Framework ASP.NET Model-View-Contoller (MVC)?

4b9b3361

Ответ 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. Вы узнаете, что вам не нужна и обновите панель.