MVC Ajax не загружает частичное представление в div, загружает новую страницу - PullRequest
0 голосов
/ 10 июля 2010

В настоящее время я работаю с MVC 1.0 и никогда раньше не работал с AJAX и имею только ограниченный опыт (начатый чуть более недели назад) с ASP.Net MVC.Я пытаюсь настроить таблицу (которая построена / находится в частичном представлении), которая заполнена информацией из базы данных, которая позволяет пользователю быстро добавлять записи удаления записей в базу данных или из базы данных прямо из таблицы.Я пытаюсь использовать AJAX, чтобы сделать это, потому что на остальной части страницы есть много другой информации, которую я не хочу перезагружать.Вот быстрый шаблон.

строка1: (текстовое поле) Добавить

строка2: Имя1 Удалить

строка3: Имя2 Удалить

Таким образом, когда пользователь хочет, он может ввести имя в (текстовое поле), нажав Добавить , и действие в контроллере добавит введенное имя вбазы данных и перезагрузите частичное представление с самой последней информацией.

До сих пор я был в состоянии получить вызываемый метод действия и добавить запись в базу данных.Проблема в том, что он не перезагружает ПРОСТО частичное представление.Вместо этого он загружает частичное представление как целую новую страницу, и отображается только его содержимое.(Вместо того, чтобы оставаться в / Project / Details / 5, страница загружается / Project / MembersDisplay)

На моей главной странице у меня есть:

<script src="<%= Links.Scripts.jquery_1_3_2_min_js %>" type="text/javascript"></script>
<script src="<%= Links.Scripts.MicrosoftAjax_js %>" type="text/javascript"></script>
<script src="<%= Links.Scripts.MicrosoftMvcAjax_js %>" type="text/javascript"></script>

В контроллере у меня есть:

[AcceptVerbs(HttpVerbs.Post)]
    public virtual ActionResult AddMember(FormCollection form)
    {
        MemberRepository repo = new MemberRepository();
        Member m = new Member();
        m.Id = Convert.ToInt32(form["Id"]);
        m.Name = form["name"];

        try{
            repo.addMember(m);
            repo.save();
        }
        catch{
            return View();
        }

        // Make a new IList of All Members in this current 
        //IList<Member> mems = (new PRDataContext()).Members_GetMembersById(m.Id).ToList<Member>();

       return View("MembersDisplay", members);
    }

Частичное представление:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<List<Application.Models.Member>>" %>
<script src="/Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="/Scripts/MicrosoffMvcAjax.js" type="text/javascript"></script>
<table>
    <% if (Model.Count() > 0) { %>
        <% foreach (var p in ViewData.Model) { %>
    <tr>
        <td><%= Html.Encode(p.Name) %></td>
        <td><%= Ajax.ActionLink("Delete", "AjaxDelete", new { p.Id, p.Name }, new AjaxOptions { Confirm = "Delete?", HttpMethod = "AjaxDelete", UpdateTargetId = "results" })%></td>
    </tr>
        <% } %>
    <% } else { %>
    <tr>
        <td><b>There are no Members.</b></td>
    </tr>
    <% } %>
</table>

В контроллере я попытался добавить if (Request.IsAjaxRequest () == true) ветвь никогда не выполнялась.Я не уверен, что ajax не загружается или что я делаю неправильно.

EDIT - Добавлен пропущенный код

Вот часть сведений, которая используетчастичный вид:

<table>
<% Ajax.BeginForm("AddMember", "Project", new AjaxOptions { UpdateTargetId = "results", InsertionMode=InsertionMode.Replace}) { %>
<tr>
    <td align="left" colspan="2" style="background-color:#93B6E0;"><font style="color:#fff;"><b>Members</b></font></td>
</tr>
<tr>
    <td width="80%">
        <input type="hidden" name="prjId" value="<%= Html.Encode(Model.Id) %>" /><input type="text" name="name" style="width:120px;" />
    </td>
    <td width="20%">
        <input type="submit" value="Add" />
    </td>
</tr>
<% } %>
<tr>
    <td colspan="2">
        <div  id="results"><% Html.RenderPartial(MVC.Members.Views.MembersDisplay, Model.Members.ToList<Member>()); %></div>
    </td>
</tr>

Ответы [ 3 ]

1 голос
/ 14 июля 2010

Если вы намерены отправить запрос на запуск Ajax.BeginForm, вам нужно включить его в форму с фигурными скобками.В настоящее время ваша заявка не находится в форме.

1 голос
/ 10 июля 2010

Дирк - не уверен, что полный код есть.однако, с краткого взгляда, вы возвращаетесь:

return View("MembersDisplay", members);

, хотя на самом деле для частичного просмотра вы должны возвращать что-то вроде:

return PartialView("MembersDisplay", members);

надеюсь, что это поможет

джим

0 голосов
/ 16 июня 2011

Я обновился до MVC 2.0, как предложил @RailRhoad.

Затем я переместил частичное представление в область и должен изменить ссылки на пути к файлам .js, чтобы они были более явными (T4MVC не отображал правильные пути).Вместо

<script src="/Scripts/MicrosoftAjax.js" type="text/javascript"></script>

или

<script src="<%= Links.Scripts.MicrosoftAjax_js %>" type="text/javascript"></script>

мне пришлось сделать

<script src="../../../../Scripts/MicrosoftAjax.js" type="text/javascript"></script>

Кроме того, действие в контроллере работало как @jim, предложенный

return PartialView(MVC.ProjectDash.Project.Views.MembersDisplay, members);

Также я удалил «InsertionMode = ...» из

<% Ajax.BeginForm("AddMember", "Project", new AjaxOptions { UpdateTargetId = "results", InsertionMode=InsertionMode.Replace}) { %>

Самая большая проблемафайлы javascript не были связаны и ссылались правильно.Как только это будет исправлено, все остальное быстро станет на свои места.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...