代码之家  ›  专栏  ›  技术社区  ›  Dirk richarbernal

MVC Ajax未在div中加载部分视图,正在加载新页面

  •  0
  • Dirk richarbernal  · 技术社区  · 16 年前

    我目前使用的是MVC1.0,以前从未使用过AJAX,对ASP.NETMVC的经验有限(一个多星期前开始)。我正在尝试设置一个表(它是在局部视图中构建的),其中填充了数据库中的信息,允许用户在表中快速地向数据库添加pr remove记录或从数据库中删除记录。我尝试使用AJAX来完成这项工作,因为页面的其余部分还有很多其他信息,我不想重新加载。这里有一个快速模板。

    第1行:(文本框) 添加

    第2行:名称1 删除

    第3行:名称2

    因此,当用户需要时,可以在(文本框)中输入名称 添加 控制器中的一个操作将把输入的名称添加到数据库中,并用最新的信息重新加载部分视图。

    在我的母版页中,我有:

    <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是否没有加载,或者我做错了什么。

    编辑

    下面是使用局部视图的详细信息部分:

    <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 回复  |  直到 13 年前
        1
  •  1
  •   jim tollan    16 年前

    德克-不确定是否有完整的代码。然而,从简单的一瞥来看,你的回归:

    return View("MembersDisplay", members);
    

    return PartialView("MembersDisplay", members);
    

    希望这有帮助

        2
  •  1
  •   RailRhoad    16 年前

    如果您打算让submit启动Ajax.BeginForm,那么需要在表单中使用花括号将其包含进来。当前您的提交不在表单中。

        3
  •  0
  •   Dirk richarbernal    15 年前

    然后我将局部视图移动到一个区域,并且必须将指向.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>

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

    另外,我从中删除了“InsertionMode=…”

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

    最大的问题是javascript文件没有正确链接和引用。一旦这个问题解决了,其他的事情就会很快适应。