2

jquery 呼び出しを介して更新したいコントローラー アクションがあります。アクションは実行されますが、パラメーターにデータがありません。

サーバーコードを実行したい列にカスタムコマンドを含むkedouiグリッドを使用しています。

kendoui grid in view
...
columns.Command(command =>
{
    command.Custom("ToggleRole").Click("toggleRole");
});
...

モデルのタイプは List<_AdministrationUsers> です。

public class _AdministrationUsers
{
    [Key]
    [ScaffoldColumn(false)]
    public Guid UserID { get; set; }

    public string UserName { get; set; }

    public string Role { get; set; }
}

ここに私の toggleRole スクリプトがあります:

<script type="text/javascript">
     function toggleRole(e) {
         e.preventDefault();
         var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
         alert(JSON.stringify(dataItem));

         $.ajax({
             type: "POST",
             url: '@Url.Action("ToggleRole", "Administration")',
             data: JSON.stringify(dataItem),
             success: function () {
                 RefreshGrid();
             },
             error: function () {
                 RefreshGrid()
             }
         });
     }
</script>

これが私のコントローラーアクションです:

[HttpPost]
public ActionResult ToggleRole(string UserID, string UserName, string Role)
{
    ...
}

コントローラー アクションは起動しますが、どのパラメーターにもデータがありません。

「dataItem」変数に実際にデータがあることを確認するために、javascript にアラートを入れました。アラート テキストは次のようになります。

{"UserID":"f9f1d175...(etc.)","UserName":"User1","Role","Admin"}
4

3 に答える 3

10

ajax post で dataType と contentType を指定してみましたか?

$.ajax({
             type: "POST",
             url: '@Url.Action("ToggleRole", "Administration")',
             data: JSON.stringify(dataItem),
             dataType: "json",
             contentType: "application/json; charset=utf-8",
             success: function () {
                 RefreshGrid();
             },
             error: function () {
                 RefreshGrid()
             }
         });
于 2012-07-25T19:02:11.650 に答える
1

オブジェクト全体を 1 つの Json 文字列として投稿しているように見えますが、コントローラーは 3 つの文字列を想定しています。MVC3 を使用している場合は、パラメーター名もコントローラーの署名と一致する必要があります。コントローラから期待される入力と一致するように、データ オブジェクトを解析してみてください。このようなもの:

$.ajax({
             type: "POST",
             url: '@Url.Action("ToggleRole", "Administration")',
             data: { UserID: dataItem.UserID, UserName: dataItem.UserID, Role: dataItem.Role },
             dataType: "json",
             contentType: "application/json; charset=utf-8",
             success: function () {
                 RefreshGrid();
             },
             error: function () {
                 RefreshGrid()
             }
         });

それが役立つことを願っています!

于 2012-07-26T12:00:55.127 に答える
0
{"UserID":"f9f1d175...(etc.)","UserName":"User1","Role","Admin"}

私には間違っているようです。これは欲しくないですか?

{"UserID":"f9f1d175...(etc.)","UserName":"User1","Role" : "Admin"}

「役割」に注意してください:「管理者」

于 2012-07-25T19:11:04.383 に答える