質問

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

私はいくつかのサーバーコードを実行したい列にカスタムコマンドを持つKedoui Gridを使用しています。

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

モデルはタイプリスト<_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)
{
    ...
}
.

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

アラートをJavaScriptに入れて、「dataItem」変数に確かにデータがあることを確認します。これは警告テキストがどのように見えるものです:

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

役に立ちましたか?

解決

あなたのAjax Postの中でデータ型と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()
             }
         });
.

他のヒント

オブジェクト全体を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()
             }
         });
.

助けを願っています!

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

私に間違っているようです。あなたはこれを望んでいませんか?

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

「役割」:「admin」

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top