1

MVCプロジェクトにあるモデルにAJAX呼び出しを行おうとしています。次のエラーが発生し続けます。

POST foobar / GetDate 405(メソッドは許可されていません)

(ここで、「foobar」はMVCプロジェクトのlocalhost:port形式です。)

スクリプトへのルートがどのようになるかわからないため、プロジェクトでルーティングを試したことはありません。この時点で、ビューを適切にルーティングする方法を知っています。コードスニペットは次のとおりです。

私のMVCプロジェクトには、次の方法のモデルがあります。

[WebMethod]
public static string GetDate()
{
    return DateTime.Now.ToString();
}

Index.aspxファイルには、次のコードがあります。

<button class="getDate">Get Date!</button>
<div class="dateContainer">Empty</div>

そして、script.jsファイルには、次のコードがあります。

$.ajax({
    type: "POST",
    url: "GetDate",
    data: "{}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (msg) {
        // Replace text in dateContainer with string from GetDate method
        $(".dateContainer").text(msg.d);
    },
    complete: function (jqHXR, textStatus) {
        // Replace text in dateContainer with textStatus
        if (textStatus != 'success') {
            $(".dateContainer").text(textStatus);
        }
    },
});

私の最終目標は、XMLデータをC#モデルのメソッドに送信してから、XMLドキュメントを解析して保存することです。

今のところ、jQueryのAJAXリクエストを私が持っているC#メソッドにリンクしようと決心します。私はそれがルーティングと構文に関係していると確信しています。

前もって感謝します!

4

1 に答える 1

7

なぜ[WebMethod]MVCプロジェクトにメソッドがあるのですか?

MVCでは、にactionメソッドを含めることができますcontroller。これはajaxからも呼び出すことができます

public class WebController : Controller
{
    public ActionResult GetDate()
    {
       return Content(DateTime.Now.ToString());
    }
}

このようにJavaScriptから呼び出すことができます(jQueryを使用)

$.get("@url.Action("GetDate","Web")",function(result){
     alert("The result from ajax call is "+result);
});

メソッドを呼び出す場合はPOST、必ずアクションメソッドをPOST属性で装飾してください。

    [HttpPost]
    public ActionResult SaveUser(string userName)
    {
       //do something and return something
    }

アクションメソッドからajax呼び出しのコールバック関数にJSONを返すこともできます。これを行うためのJSONメソッドがController(WebControllerの基本クラス)クラスにあります。

    public ActionResult GetMagician(string userName)
    {
       return Json(new { Name="Jon", Job="Stackoverflow Answering" },
                                  JsonRequestBehavior.AllowGet);
    }
于 2012-08-10T22:00:12.227 に答える