-2

学生情報を表示するウェブサイトがあります。Webサイトにいくつかのテキストフィールドを追加し、ボタンクリックで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>

前もって感謝します

4

2 に答える 2

1

私が見るあなたのコードにはいくつかの問題があります:

  • dataパラメータを一重引用符で囲まないでください。
  • 成功とエラーのパラメータは文字列であってはなりません。それらは関数でなければなりません
  • ASP.NETMVCアプリケーションで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() {
    // ...
}
于 2012-06-28T06:20:43.110 に答える
0

urajaxパラメーターで投稿に言及する必要があります

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

また、ajax関数のデータ型としてjsonについて言及しましたが、アクションはtext/htmlを返します。

これらの2つの変更を行い、それが機能しない場合は、フィドラーをチェックして、サーバーから取得している応答を確認します。

有効な応答を受け取っている場合は、成功関数をチェックして、問題が正しく行われているかどうかを確認してください。

アクションのgetおよびpostシナリオをサポートする場合は、アクションの属性を次のように変更します。

    [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
于 2012-06-28T00:25:22.320 に答える