【问题标题】:Radio button to trigger Ajax call onClick [closed]单选按钮触发 Ajax 调用 onClick [关闭]
【发布时间】:2017-07-17 19:04:21
【问题描述】:

我有一个本质上是调查表的东西。这是 17 道选择题。我想使用 Ajax 来保存答案并在用户进行操作时报告分数。即:当用户选择单选按钮来选择问题的答案时,它会在数据库中创建或更新该问题的答案,计算所有答案的分数并显示在屏幕上的 div 中。单击提交按钮时,所有这些都可以正常工作。

这是表单代码

    @using (Ajax.BeginForm(
        new AjaxOptions
        {
            HttpMethod="post",
            InsertionMode=InsertionMode.Replace,
            UpdateTargetId="currentScore"
        }
        ))
    { ... }

每个问题都有 5 个答案链接到 db 表中的答案 ID。我编写了代码来将答案添加到数据库并在提交表单时更新屏幕上的分数,一切正常当我单击提交按钮时,但我希望每次单击特定答案的单选按钮时都会发生这种情况。

我做了什么来尝试这个:

在我添加的单选按钮上:onclick="this.form.submit()"


结果:

表单提交,就好像它不是一个 Ajax 表单,而是一个普通的表单,页面重新加载。

我在页面上有以下js:

<script src="/Scripts/jquery-1.10.2.js"></script>
<script src="/Scripts/jquery.unobtrusive-ajax.js"></script>
<script src="/Scripts/jquery.validate.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.js"></script>
<script src="/Scripts/jquery-1.10.2.min.js"></script>
<script src="/Scripts/jquery-ui-1.10.3.js"></script>
<script src="/Scripts/modernizr-2.6.2.js"></script>

这是控制器标头(根据要求)

using System;
using System.Collections.Generic; 
using System.Data; 
using System.Data.Entity; 
using System.Linq; 
using System.Threading.Tasks; 
using System.Net; 
using System.Web; 
using System.Web.Mvc; 
using PROJECTNAME.Models; 

namespace PROJECTNAME.Controllers { 

public class QuestionsController : Controller
{
...

js在一个bundle中:

    bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                "~/Scripts/jquery-{version}.js",
                "~/Scripts/jquery.unobtrusive*",
                "~/Scripts/jquery.validate*"));

在布局上加载的内容:

@Scripts.Render("~/bundles/jquery")

【问题讨论】:

  • 如何在视图代码中添加脚本文件?可能js文件的路径不正确?
  • 你能显示你的控制器标题吗?
  • @EhsanSajjad js 文件正在正确加载,记住按钮可以正常工作。它们在一个脚本包中,通过 @Scripts.Render("~/bundles/jquery") 加载到布局中:` bundles.Add(new ScriptBundle("~/bundles/jquery" ).Include("~/Scripts/jquery-{version}.js", "~/Scripts/jquery.unobtrusive*", "~/Scripts/jquery.validate*"));`
  • @lloyd 我不知道如何让 cmets 显示新行,所以这将是非常难以理解的......使用 System;使用 System.Collections.Generic;使用 System.Data;使用 System.Data.Entity;使用 System.Linq;使用 System.Threading.Tasks;使用 System.Net;使用 System.Web;使用 System.Web.Mvc;使用 PROJECTNAME.Models;命名空间 PROJECTNAME.Controllers { 公共类 QuestionsController : 控制器
  • “太宽泛”?我以为我很具体。自命不凡的刺。我之前听说过有人抱怨过。

标签: c# jquery ajax asp.net-mvc asp.net-ajax


【解决方案1】:

如果按钮有效,可以尝试的事情:

1) 给form一个ID或者使用form标签提交onclick="$('#IdOfForm').submit();"

2) 如果单个存在onclick="$('form').submit();",则在页面上查找表单标签

3) 查找表单父 onclick="$('this').parents('form').submit();" 或查找表单标签的其他语法。

4) 或者只是触发按钮点击onclick="$('#IdOfSubmBtn').click();"

所以我会将 onclick 事件放在函数中,看看它在每个步骤中得到了什么。或

有时它需要一点延迟,因为 DOM 接收 AJAX 事件的速度很慢。 onclick="setTimeout(function() { yours,1,2, or 3 }, 300);"

【讨论】:

  • #4 是唯一有效的。其他人提交了表单,但不是作为 Ajax。
  • 试试上面的setTimeout函数,可能会有帮助。
  • 我不应该使用按钮点击事件有什么原因吗?这确实有点像陪审团操纵,但如果其他选项不起作用......
  • 没有任何理由,如果代码按照它设计的那样做,那么一切都很好!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
  • 2017-06-08
  • 1970-01-01
  • 1970-01-01
  • 2020-09-28
  • 1970-01-01
相关资源
最近更新 更多