0

IdKendo UI グリッドのすべてのユーザー行からプロパティ (Guid)を取得する次の JavaScript コードがあります。今、これらの ID と所有者の roleId を、MVC3 アクション メソッドに渡すことができる JSON オブジェクトに構成する最善の方法を考えています。私のばかげた文字列連結に対して。

$("#command-add-selected").click(function () {
    var json = "roleId: '51FC554E-353C-4D55-BE52-1B4BF9D2F17F', users: [";
    var avail = $("#availableUsersGrid").data().kendoGrid._data;
    for (var i = 0; i < avail.length; i++) {
        json += "{ Id: '" + avail[i].Id + "'},";
    }
    json = json.slice(0, -1);
    json += "]";
    alert(json);
    return false;
});

アクション メソッドは GET または POST にすることができ、値を返す必要はありません (これは別のパズルであり、返されるビューはありません)。それが行うのは、上記のコードに続く他の ajax コードによってフェッチされるドメインの更新だけです。

上記の型の JSON を、基本的に void 戻り型のアクション メソッドに渡すにはどうすればよいですか?

編集: この質問は、私の質問のマイナーな部分にうまく答えましたpush

4

3 に答える 3

4

JSON.Stringify()1.まず第一に、JavaScriptオブジェクトをJSON文字列に変更するために、完全なjson ur self useメソッドを作成する必要はありません。
2. JSON 文字列を作成した後、公開されている MVC コントローラーの通常のメソッドに変換できGETます。POSTアクション メソッドのシグネチャが似ていても、public ActionResult MehodName(string jsonString)常に null を返すことができます。
3.名前空間の組み込みJavaScriptSerializerクラスを使用System.Web.Script.Serializationして、アクションで受け取ったjson文字列を逆シリアル化して、同じプロパティを持つオブジェクトを作成できます
編集:
-javascript配列名を作成しusers、forループ内.push()でjavascriptの関数を使用して、次のようなオブジェクトを挿入しますこれ

var users = [];
for(something)
{
var user = {"Id":"YOUR ID VALUE"};
users.push(user)
}
var objectToSerialize = {"roleId":"YOUR ROLE GUID","Users":users};
var jsonString = JSON.stringify(objectToSerialize);

編集 2:-
以前のコメントを見ると、JSON オブジェクト全体を非シリアル化する必要はありません。あなたのアクションメソッドがこのような署名を持っていても、あなたのオブジェクトアーキテクチャによって行く

public ActionResult GetUsersByRole(Users users)
{
//some code 
}

このようなユーザークラス

class Users
{
public string RoleId{get; set;}
public User[]{get; set;}
}

このようなユーザークラス

class User
{
string Id{get; set;}
}

プロパティを複雑なユーザーオブジェクトに自動的にバインドします

于 2012-04-13T19:06:07.157 に答える
1

Parv Sharma のソリューションと組み合わせて:

function User(id) { this.Id=id; }

$("#command-add-selected").click(function () {

    var avail = $("#availableUsersGrid").data().kendoGrid._data;
    var userArray = array();
    for (var i = 0; i < avail.length; i++) {
        userArray.push(new User(avail[i].Id));
    }
    var obj = {roleId:'51FC554E-353C-4D55-BE52-1B4BF9D2F17F',users:userArray};
    alert(JSON.stringify(obj));
    return false;
});
于 2012-04-13T19:36:53.330 に答える
0

Url.Action("NameofAction","nameofcontroller", json); を使用できるはずです。GET にするか POST にするかによって、AcceptVerbs 属性もアクション メソッドに追加する必要がある場合があります。構築部分に関しては、文字列をまったく使用しないことをお勧めします。Json は文字列ではなくオブジェクトであるため、foreach ループを使用して「ユーザー」オブジェクトを作成し、そのオブジェクトを json の戻りオブジェクトにスローします。

編集:stringifyについて言及するのを忘れていました。うん。それを使用します。

于 2012-04-13T19:10:58.463 に答える