1

OK、私は .NET MVC3 をまったく使用したことがなく、問題に遭遇しました。

Jquery モバイルを使用してモバイル アプリケーションを開発しており、モバイル アプリケーションから Web ページにデータを送信したいと考えています。サーバーにはこれがあります:

    [HttpPost]
    [ValidateInput(true)]
    public ActionResult Save(FormCollection actionValues) {
        int age = Int32.Parse(actionValues["age"]);
        string fn = actionValues["first_name"];
        string ln = actionValues["last_name"];
        CreateAndStorePersonModel(age,fn,ln); // Dummy method, not important
        return new HttpStatusCodeResult(200); // Thanks to 3nigma for this
    }

私が欲しいのは、actionValues を取得してモデルに保存し、このモデルをデータベースに保存できるようにすることです。この例では、属性「first_name、last_name、age」を持つ「Person」を保存すると仮定します。また、将来このモデルを拡張する可能性があります。

モバイル アプリから次のコードを実行します。

    $.ajax({
        type: "POST",
        url: "http://external.url/Save",
        dataType: "json",
        traditional: true, // default serialization (do I even need this?)
        data: {
            "age": data_age,
            "first_name": data_fn,
            "last_name": data_ln,
        },
        success: function(d) { alert("Success: "+d},
    }).error(function(data, errorTxt, jqXHR) {
    alert('Error: '+errorTxt);
});;

500 内部エラーが発生しましたが、3nigma のおかげでこれはなくなりました。

編集:

Web サーバーからテストすると、インスペクターをチェックすると http 302 "Found" が表示されますが、データは保存されません。携帯電話にコンパイルするとき、.error ハンドラは「parseerror」で inn をキックしますが、データは保存されます。理由はありますか?

答え:

302 "Found" は、ビューを返したためです (3nigma のおかげです)。これを返す必要があります。

    return new HttpStatusCodeResult(200);
4

2 に答える 2

3

500は内部サーバーエラーです

public ActionResult Save(FormCollection actionValues) {
        int age = long.Parse(actionValues["age"]);// there error seems to be here you are boxing long into int
        string fn = actionValues["first_name"]; 
        string ln = actionValues["last_name"];
        CreateAndStorePersonModel(age,fn,ln); 
    }

代わりに試してください

int age = Int32.Parse(actionValues["age"].ToString());

コメントに答える

ActionResultからJsonを返すだけのものを含める必要はありません。

[HttpPost]
public ActionResult Save(FormCollection actionValues) {
     //your code here
     return Json(new {IsSuccess="success" });
    }

そして、ajaxサクセスハンドラーでは、次のようにアクセスできます

 $.ajax({
        type: "POST",
        url: "http://external.url/Save",
        dataType: "json",
        traditional: true, // default serialization (do I even need this?)
        data: {
            "age": data_age,
            "first_name": data_fn,
            "last_name": data_ln,
        },
        success: function(data) {
            alert("Success: "+data.IsSuccess}, //will alert Success: success
    }).error(function(data, errorTxt, jqXHR) {
    alert('Error: '+errorTxt);
});;
于 2012-03-08T14:44:54.903 に答える
0

問題を引き起こしているのはjsonデータ構文である可能性があります

data: 
{
    "age"         : intValue,
    "first_name"  : stringValueinSingleQuotes,
    "last_name"   : stringValueinSingleQuotes
}

さらに成功することができます: $.ajax 呼び出しの Handler() 属性。呼び出しが成功すると、Handler() メソッドが呼び出されます。

于 2012-03-08T13:00:15.427 に答える