加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 关于Ajax调用Register动作方法的书呆子晚餐错误

发布时间:2020-12-16 07:02:40 所属栏目:asp.Net 来源:网络整理
导读:我是MVC的新手,我正在MS MVC2中实现Nerd Dinner MVC示例应用程序.我在第10步,“Ajax启用RSVP接受”.我添加了新的RSVP控制器并添加了Register操作方法,如下所示: public class RSVPController : Controller{ DinnerRepository dinnerRepository = new Dinner
我是MVC的新手,我正在MS MVC2中实现Nerd Dinner MVC示例应用程序.我在第10步,“Ajax启用RSVP接受”.我添加了新的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脚本库的引用,并将下面的代码添加到Details视图中,如文章中所述:

<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 for this event”链接时,我得到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?这部分书呆子晚餐应用程序是否存在已知问题?我认为该应用程序是用MVC1编写的,我使用的是MVC2 – 这是否会产生差异?

TIA,

夏兰

解决方法

您的操作的这一部分解释了为什么您只是“看到你”的消息:

return Content("Thanks - we'll see you there!");

这就是归还的全部.

你开始使用404的原因是使用了actionlink:

Ajax.ActionLink(...

这将创建一个URL链接,一个GET而不是一个POST,而AcceptVerbs(HttpVerbs.Post)将强制不匹配.你应该提交一份表格来做一个帖子:

using (Ajax.BeginForm("Controller","Action",new AjaxOptions { UpdateTargetId = "f1" } )) { %>
 <div id="f1">
 <!-- form fields here -->
 <input type="submit" />
 </div>
<% } %>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读