Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net MVC Ajax未在div中加载部分视图,正在加载新页面_Asp.net_Ajax_Asp.net Mvc_Partial Views - Fatal编程技术网

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

Asp.net MVC Ajax未在div中加载部分视图,正在加载新页面,asp.net,ajax,asp.net-mvc,partial-views,Asp.net,Ajax,Asp.net Mvc,Partial Views,我目前正在使用MVC1.0,以前从未使用过AJAX,对ASP.NETMVC的经验有限(一周多前开始)。我正在尝试设置一个表(构建/在部分视图中),该表中填充了数据库中的信息,允许用户从表中快速向数据库中添加或从数据库中删除记录。我尝试使用AJAX来完成这项工作,因为页面的其余部分还有很多其他信息,我不想重新加载。这里有一个快速模板 第1行:(文本框)添加 第2行:名称1删除 第3行:名称2删除 因此,当用户需要时,他们可以在(文本框)中输入名称并点击Add,控制器中的操作会将输入的名称添加到数据

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

第1行:(文本框)添加

第2行:名称1删除

第3行:名称2删除

因此,当用户需要时,他们可以在(文本框)中输入名称并点击Add,控制器中的操作会将输入的名称添加到数据库中,并使用最新信息重新加载局部视图

到目前为止,我已经能够调用action方法,并将记录添加到数据库中。问题在于它不只是重新加载局部视图。相反,它将部分视图作为一个全新页面加载,并且它的内容是唯一显示的内容。(页面将加载/Project/MembersDisplay,而不是停留在/Project/Details/5)

在我的母版页中,我有:

<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);
    }
[AcceptVerbs(HttpVerbs.Post)]
公共虚拟操作结果AddMember(FormCollection表单)
{
MemberRepository repo=新建MemberRepository();
成员m=新成员();
m、 Id=转换为.ToInt32(格式[“Id”]);
m、 名称=表格[“名称”];
试一试{
回购增加成员(m);
repo.save();
}
抓住{
返回视图();
}
//为当前列表中的所有成员创建一个新的IList
//IList mems=(新的PRDataContext()).Members_GetMembersById(m.Id).ToList();
返回视图(“成员显示”,成员);
}
局部视图是

<%@ 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>

0) { %>
没有成员。
在控制器中,我尝试添加了(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>

成员

德克-不确定是否有完整的代码。但是,简单看一下,您的返回:

return View("MembersDisplay", members);
实际上,对于局部视图,您应该返回如下内容:

return PartialView("MembersDisplay", members);
希望这有帮助


jim

如果您打算提交以启动Ajax.BeginForm,则需要将其包含在带有花括号的表单中。当前您的提交不在表单中。

我按照@RailRhoad的建议升级到MVC 2.0

然后,我将局部视图移动到一个区域,并且必须将指向.js文件的路径链接更改为更加明确(T4MVC没有呈现正确的路径)

我不得不这么做

此外,控制器中的操作按照@jim的建议工作

return PartialView(MVC.ProjectDash.Project.Views.MembersDisplay, members);
此外,我还从中删除了“InsertionMode=…”



最大的问题是javascript文件没有正确链接和引用。一旦修复,其他的事情很快就会就位。

听起来你是在执行回发而不是ajax POST请求。你能共享调用控制器操作的代码吗?修复了它。除此之外,还有指向.js fil的链接ES是错误的(谢谢Fixbug指出了一个)。我尝试了一个Actudio结果和TealAlgVIEW返回类型,并且都不工作。它仍然将整个部分加载到窗口中,并且没有其他的东西。此外,您可能需要考虑升级到MVC 2.0,更改代码以包含{},并将提交按钮与{}一起放置。s、 但它仍然把所有的东西都装进了窗口,而不是div。
<% Ajax.BeginForm("AddMember", "Project", new AjaxOptions { UpdateTargetId = "results", InsertionMode=InsertionMode.Replace}) { %>