Публикация .net MVC 3 FromsCollection из другого домена с помощью jquery ajax - PullRequest
1 голос
/ 08 марта 2012

ОК, я совершенно новичок в .NET MVC3 и столкнулся с проблемой.

Я занимаюсь разработкой мобильного приложения с использованием Jquery mobile и хочу отправить данные из мобильного приложения на веб-страницу. На сервере у меня это:

    [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 ​​и сохранять их в модели, а затем сохранять эту модель в базе данных. В этом примере мы предположим, что я хочу сохранить «Person» с атрибутами: «first_name, last_name, age». Также я мог бы расширить эту модель в будущем.

В мобильном приложении я запускаю следующий код:

    $.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 это уже не так.

EDIT:

При тестировании с моего веб-сервера я получаю http 302 "Найдено" при проверке инспектора, но данные не сохраняются. При компиляции на мобильный телефон обработчик .error запускает inn с помощью «parseerror», но данные сохраняются. Есть идеи почему?

Ответ:

302 «Найдено» пришло, потому что я вернул представление (благодаря 3nigma). Должно вернуть это:

    return new HttpStatusCodeResult(200);

Ответы [ 2 ]

3 голосов
/ 08 марта 2012

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());

при ответе на комментарии

вам не нужно ничего включать, просто верните Json изActionResult, например

[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);
});;
0 голосов
/ 08 марта 2012

это может быть ваш синтаксис данных json, который создает проблему

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

. Более того, вы можете иметь атрибут success: Handler () в вызове $ .ajax.Метод Handler () будет вызываться в случае успешного вызова.

...