Pergunta

Eu tenho uma exibição do índice que deseja atualizar automaticamente como o usuário digita um ID de cliente. Eu tenho algo semelhante ao trabalho (só ele estava atualizando apenas um rótulo.) - mas isso não vai funcionar

O que acontece é o parcial é apenas prestado por si só (e não em lugar do UpdateTargetId). Assim, os dados é processado em uma nova página. Aqui está o meu código:

Controlador:

public ActionResult ClientList(string queryText)
    {
        var clients = CR.GetClientLike(queryText);
        return PartialView("ClientIndex", clients);
    }

Vista Parcial:

<table>
<thead>
    <tr>
        <td>Client ID</td>
        <td>Phone1</td>
        <td>Phone2</td>
        <td>Phone3</td>
        <td>Phone4</td>
    </tr>
</thead>
<tbody>
    <% if (Model != null)
       {
           foreach (Client c in Model)
           { %>
        <tr>
            <td><%= Html.Encode(c.ClientID)%></td>
            <td><%= Html.Encode(c.WorkPhone)%></td>
            <td><%= Html.Encode(c.WorkPhone1)%></td>
            <td><%= Html.Encode(c.WorkPhone2)%></td>
            <td><%= Html.Encode(c.WorkPhone3)%></td>

        </tr>
    <% }
       } %>
</tbody>

Main Ver:

Inserir código confuso, então este é apenas copiar / colar:

$ (Function () { $ ( "# QUERYTEXT"). Keyup (function () { . $ ( '# SForm') submit (); }); });

  <div id="status" class="status" name="status">
    <%--<% Html.RenderPartial("ClientIndex", ViewData["clients"]); %> Should this be here???? --%>

  </div>
Foi útil?

Solução

Ao invés de postar um formulário na página constantemente por que não fazer um para trás chamada as cenas jQuery.get para obter os resultados da pesquisa para o texto fornecido. Eu acho que isso seria mais rápido e mais limpo. Ao submeter o formulário como eu acho que você está (a julgar pela minha leitura de seu código) que você está fazendo com que a página para essencialmente atualizar (e não re-escrita para o div).

$('#sForm').submit()

Outras dicas

Eu tive o mesmo problema.

Na minha visão parcial, eu tinha essa

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>

mas deve ter sido este

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IQueryable<Client>>" %>

uma maneira fácil de testar se a sua chamada ajax está trabalhando é para devolver uma cadeia em vez de um ActionResult

public string ClientList(string queryText)<
{
    return("ok, the ajax call must have worked because I see this string.");
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top