【发布时间】:2010-07-09 21:26:48
【问题描述】:
我目前正在使用 MVC 1.0,之前从未使用过 AJAX,并且对 ASP.Net MVC 的经验有限(开始于一周多一点前)。我正在尝试设置一个表(已构建/在部分视图中),该表填充了来自数据库的信息,允许用户直接从表中快速将 pr 删除记录添加到数据库中或从数据库中删除记录。我正在尝试使用 AJAX 来完成这项工作,因为页面的其余部分还有很多其他信息,我不想重新加载。这是一个快速模板。
row1:(文本框)添加
row2: Name1 删除
row3: Name2 删除
因此,当用户想要时,他们可以在(文本框)点击 Add 中输入一个名称,控制器中的一个操作会将输入的名称添加到数据库中并重新加载部分视图最新信息。
到目前为止,我已经能够获取要调用的操作方法,并将记录添加到数据库中。问题是它不会仅重新加载部分视图。而是将部分视图加载为一个全新的页面,并且它的内容是唯一显示的内容。 (而不是停留在 /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 是否没有加载,或者我做错了什么。
编辑 - 添加缺失代码
以下是使用局部视图的详细信息部分:
<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>
【问题讨论】:
-
听起来您正在执行回发而不是 ajax POST 请求。你能分享调用你的控制器动作的代码吗?
-
已修复。除此之外,.js 文件的链接是错误的(感谢 FireBug 指出这一点)。
标签: asp.net ajax asp.net-mvc partial-views