我是MVC的新手,正在使用MS MVC2实现Nerd Dinner MVC示例应用程序。 我现在进行到第10步,“启用Ajax接受RSVPs”。 我添加了新的RSVP控制器,并像下面这样添加了Register动作方法:
public class RSVPController : Controller
{
DinnerRepository dinnerRepository = new DinnerRepository();
//
// AJAX: /Dinners/RSVPForEvent/1
[Authorize, AcceptVerbs(HttpVerbs.Post)]
public ActionResult Register(int id) {
Dinner dinner = dinnerRepository.GetDinner(id);
if (!dinner.IsUserRegistered(User.Identity.Name)) {
RSVP rsvp = new RSVP();
rsvp.AttendeeName = User.Identity.Name;
dinner.RSVPs.Add(rsvp);
dinnerRepository.Save();
}
return Content("Thanks - we'll see you there!");
}
}
我已经添加了Ajax脚本库的引用,并按照文章中的描述,在详细视图中添加了以下代码:
<div id="rsvpmsg">
<% if(Request.IsAuthenticated) { %>
<% if(Model.IsUserRegistered(Context.User.Identity.Name)) { %>
<p>You are registred for this event!</p>
<% } else { %>
<%= Ajax.ActionLink( "RSVP for this event",
"Register", "RSVP",
new { id=Model.DinnerID },
new AjaxOptions { UpdateTargetId="rsvpmsg"}) %>
<% } %>
<% } else { %>
<a href="/Account/Logon">Logon</a> to RSVP for this event.
<% } %>
</div>
当我点击“RSVP参加此活动”的链接时,出现404错误,显示无法找到资源。
The resource cannot be found.
Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly.
Requested URL: /NerdDinner/RSVP/Register/24
Version Information: Microsoft .NET Framework Version:2.0.50727.4200; ASP.NET Version:2.0.50727.4205
当我进入代码时,它正确地找到了Register操作方法。在尝试过后,我从Register方法的约束条件中删除了“AcceptVerbs(HttpVerbs.Post)”,然后它就可以工作了。但是它没有重新加载页面,而只是在一个新的空白页面上显示“谢谢 - 我们会在那里见到你”的消息。在详细页面中查看HTML,没有表单提交正在进行,所以我想知道Ajax代码是否需要更多东西来使调用成为Post?这个Nerd Dinner应用程序的这部分是否有已知问题?我认为该应用程序是使用MVC1编写的,而我正在使用MVC2 - 这会有区别吗?
TIA,
Ciaran