1

MVCWebサイトプロジェクトでjqueryを使用しています。

'testController'という単純なC#コントローラーがあります。

public class testController
{
    public string test(string id)
    {
        return id;
    }
}

..そしてそれを使用するjavascript関数:

function myfunct(sData) {
    $.ajax({
        type: "POST",
        async: false,
        datatype: "json",
        url: '/test/test',
        data: '{' + sData + '}', //Not Working if I set sData = "id:'Hello'"
                                 //Work if I write data = { id:'hello'},
        success: function (json) {
            alert(json); //Need to return 'Hello'
        }
    });
}

..「データ」パラメータを動的に割り当てる方法はありますか?

4

6 に答える 6

4

渡すオブジェクト内のプロパティが、アクションが受け入れるタイプのプロパティと一致する限り、必要に応じてオブジェクトを作成できます。これを試して:

var sData = { id: 1234 }; // note 'id' matches the property in the signature of the action method

// in the $.ajax() call properties...
data: sData

これはクラスでも機能します。たとえば、コントローラにこのクラスとアクションがある場合、次のようになります。

public class Foo {
    public int Id { get; set; }
    public string Name { get; set; }
}

// in controller:
public ActionResult Bar(Foo myFoo) {
    // do stuff with Foo
}

$.ajax次に、次の形式でjavascriptオブジェクトを渡すことができます。

var data = { Id: 1234, Name: 'Foo bar' };

プロパティは、メソッドシグネチャのクラスのプロパティにマップされることに注意してください。

于 2013-01-14T10:46:49.770 に答える
2

keyとその両方が動的である場合は、を呼び出すときにプロパティvalueとして設定しているオブジェクトを作成するために、わずかに異なる構文を使用する必要があります。datajQuery.ajax()

一般的な原則は次のとおりです。

var key = 'id', value = 'Hello', data = {};
data[key] = value;

これは、JavaScriptではオブジェクトキー(またはプロパティ)が文字列である必要がないためです。以下は完全に有効で同等です。

var obj = {id : 'Hello'};
var obj = {'id' : 'Hello'};

したがって、変数に格納されている動的な値を使用しようとし、それを作成しようとするときにオブジェクトリテラルに渡すだけの場合、JavaScriptは、その名前の変数の値を使用することになっていることを認識せず、代わりにそれをオブジェクトのキーとして扱うだけです。

あなたの場合、次のように、オブジェクト自体を渡すように関数を変更することをお勧めします。

function myfunct(sData) {
    $.ajax({
        type: "POST",
        async: false,
        datatype: "json",
        url: '/test/test',
        data: sData,
        success: function (json) {
            alert(json); //Need to return 'Hello'
        }
    });
}

次に、次のように使用します。

var key = 'id', value = 'Hello', data = {};
data[key] = value;
myfunct(data);

なぜ機能しdata: '{' + sData + '}'なかったのかというと、プロパティの値として文字列を渡すとdata、jQueryはそれをAJAXリクエストのクエリ文字列として使用するだけであり、渡す文字列は正しいパラメータを設定しません。

于 2013-01-14T11:03:48.167 に答える
0

個別の変数を作成して、コントローラーのアクションにパラメーターを送信できます。

function myfunct(sData) {
    $.ajax({
        type: "POST",
        async: false,
        datatype: "json",
        url: '/test/test',
        data: { id: 'hello'}, // pass directly your parameter in a dynamic object
        success: function (json) {
            // your can read: json.Id , json.Name, etc...
            alert(json.id); //Need to return 'Hello' in ID property
        }
    });
}

コントローラでは、文字列を取得してJSon形式の結果を返すことができます。

public class TestController
{
    public ActionResult Test(string id)
    {
        string valueResult = id; // process your result
        return Json(new { id: valueResult, name = 'User' }, JsonRequestBehavior.AllowGet.);
    }
}
于 2013-01-14T10:48:46.887 に答える
0

次を試してください

var mydata = { key : value };

    $.ajax({
        type: "POST",
        async: false,
        datatype: "json",
        url: '/test/test',
        data: mydata,
        success: function (json) {
            alert(json); //Need to return 'Hello'
        }
    });
于 2013-01-14T10:49:14.440 に答える
0

私は解決策を見つけました:

前の回答で@AnthonyGristが述べたように、文字列ではなくオブジェクトを使用する必要があります...したがって、'を使用します。eval()'メソッドキーと値のペアをその場で作成します。

このようなもの:

function myfunct(sData) {
eval('var ssData = {' + sData + '}');
$.ajax({
    type: "POST",
    async: false,
    datatype: "json",
    url: '/test/test',
    data: ssData,
    success: function (json) {
        alert(json); 
    }
});
}
myfunct("id:'hello'"); //Return Hello
myfunct("id:'bye'"); //Return bye

...これは私にとってはうまくいくようです..あなたはどう思いますか?

于 2013-01-14T11:21:54.497 に答える
0

あなたはこれを探しているかもしれません:

jQuery.parseJSON()あなたの場合は役に立ちます:http://api.jquery.com/jQuery.parseJSON/

function myfunct(sData) {

    $.ajax({
        type: "POST",
        async: false,
        datatype: "json",
        url: '/test/test',
        data: jQuery.parseJSON(sdata),
        success: function (json) {
            alert(json); //Need to return 'Hello'
        }
    });
}
于 2013-01-14T11:00:59.950 に答える