【问题标题】:Button Click not triggering jQuery(Ajax) function to update page按钮单击不触发 jQuery(Ajax) 功能更新页面
【发布时间】:2012-06-28 23:56:10
【问题描述】:

我有一个显示学生信息的网站。我想在网站上添加几个文本字段,并在单击按钮时使用 jQuery(Ajax) 异步更新这些字段。我相信我已满足所有要求,但数据仍未更新。

我在这里遗漏了什么吗?点击按钮什么都不做。

这是我的代码 -

控制器:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Student.Models;    

namespace Student.Controllers
{
    public class StudentController : Controller
    {           
        public ActionResult Index()
        {
            return View("Student");
        }  

        [HttpPost()]    
        public ActionResult DisplayStudentName(string id)
        {
            StudentDataContext db = new StudentDataContext();
            var StudentName = (from p in db.vwStudent.Where(a => a.StudentId == id)
                             group p by p.StudentName into g
                             select g.Key).FirstOrDefault();

            ViewData["StudentName"] = StudentName;

            return View("Student");

        }

        [HttpPost()]
        public ActionResult DisplayStudentStatus(int? id, string flg)
        {
            AccountDataContext db = new AccountDataContext();
            var StudentStatus = (from p in db.vwStudent.Where(a => a.StudentId == id && a.LastFlag == flg)
                             group p by p.Status into g
                             select g.Key).FirstOrDefault();

            ViewData["StudentStatus "] = StudentStatus;

            return View("Student");

        }

    }
}

jQuery:

    $("#Button1").click(function() {
        var link = '<%= Url.Action("DisplayStudentName", "Student")';
        $.ajax({
            url: link,
            data: "{id: '<%= ViewContext.RouteData.Values["id"] %>'}",
            dataType: "html",
            success: Success,
            error: Fail
        });
    });

    $("#Button2").click(function() {
        var link = '<%= Url.Action("DisplayStudentStatus", "Student")';
        $.ajax({
            url: link,
            data: "{id: '<%= ViewContext.RouteData.Values["id"] %>' , 
                    flg: '<%= ViewContext.RouteData.Values["flg"] %>'}",
            dataType: "html",
            success: Success,
            error: Fail
        });
    });

function Success(){
alert("Success");
}

function Fail(){
alert("Fail");
}

查看:

    <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>

    <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
        Student Form
    </asp:Content>

    <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <form id="form1" method="get" runat="server">

Student ID:<input type="text" name="id" id="StudentId" value="<%=HttpContext.Current.Request.QueryString["id"]%>" /><br />

Student Name:<input type="text" name="StudentName" id="StudentName" value="<%=ViewData["StudentName"]%>"/>
<div id="Btn1"><input type="button" value="Display Student Name" name="Btn1" id="Button1" />
</div>

Student Status:<input type="text" name="StudentStatus" id="StudentStatus" value="<%=HttpContext.Current.Request.QueryString["StudentStatus"]%>" />       
<div id="Btn2"><input type="button" value="Display Profit Center" name="Btn2" id="Button2" />
</div>

</div>         
</form>
</asp:Content>

提前致谢

【问题讨论】:

  • 您希望在按钮的 onClick 触发时发生一些事情,对吗?我认为你需要一个 onClick 属性。
  • 您是否检查过您在某处没有收到 Javascript 错误。例如,使用 Chrome 时,您是否查看过控制台日志? @BobHorn $("#Button1").click 包含在单击按钮时运行脚本的处理程序。

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


【解决方案1】:

我看到你的代码有几个问题:

  • 您不应将data 参数包含在单引号中。
  • 您的成功和错误参数不应是字符串。它们应该是函数
  • 您不应该在 ASP.NET MVC 应用程序中对 URL 进行硬编码。处理 url 时应始终使用 url 助手

所以:

$("#Button1").click(function() {
    var link = '<%= Url.Action("DisplayStudentName", "Student")';
    $.ajax({
        url: link,
        data: { id: '<%= ViewContext.RouteData.Values["id"] %>' },
        success: Success,
        error: Fail
    });
});

$("#Button2").click(function() {

    var link = '<%= Url.Action("DisplayStudentStatus", "Student")';
    $.ajax({
        url: link,
        data: {
            id: '<%= ViewContext.RouteData.Values["id"] %>' , 
            flg: '<%= ViewContext.RouteData.Values["flg"] %>' 
        },
        success: Success,
        error: Fail
    });
});

显然您必须声明使用的 2 个函数:

function Success(data) {
    // ...
}

function Fail() {
    // ...
}

【讨论】:

  • 我根据您的建议更新了我的 jQuery,但仍然没有任何反应,感觉当我单击“显示学生姓名”按钮时甚至没有触发我的 jQuery。另外,我的 Success 和 Fail 函数应该包含什么?如果我只显示一条消息可以吗?我已经更新了上面的代码。
  • 如果您在点击回调中添加警报会发生什么?您的视图中是否引用了 jQuery?您将在 Success 和 Fail 函数中做什么将完全取决于您要实现的目标。您也可以将它们定义为匿名函数。尝试调试您的代码。使用 javascript 调试工具,例如 FireBug,对您有很大帮助。
  • 我没有看到“成功”或“失败”警报。我在我的 Site.Master 中引用了 jQuery: 我会看看我是否可以在工作中获得下载 FireBug 的许可。单击“显示学生姓名”按钮后,我想根据输入的学生 ID 显示学生姓名,学生身份也是如此。 “Button1”和“Button2”点击功能不会解决这个问题吗?还是我需要在“成功”和“失败”函数中执行此操作?
  • /Scripts/StudentDetails.js 不是 jQuery。我真的建议你阅读一些关于 jQuery 的入门教程,因为你似乎缺乏一些非常基本的概念:docs.jquery.com/Main_Page
  • 我更正了对以下内容的引用: 我引用的是 jQuery 的 google 版本。我之前确实读过那个文件。我了解基础知识,只是我不知道我的代码中缺少什么。
【解决方案2】:

需要在你的ajax参数中提及post

    $.ajax({
            url: link,
            type: 'post',

您还提到 json 作为 ajax 函数中的数据类型,但您的操作返回 text/html。

进行这 2 项更改,如果它不起作用,请检查 fiddler 以查看您从服务器获得的响应。

如果你得到一个有效的响应,那么检查你的成功函数,看看你是否做对了。

如果您想在您的操作上支持获取和发布场景,请将您的操作上的属性更改为

    [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多