0

テレリック グリッドにレコードのリストを表示するラジオ ボタンがあります。ラジオ ボタンをオンにすると、完全なレコードと不完全なレコードが表示されます。ただし、ユーザーは、完全または不完全なレコードのみを表示する方法を望んでいます。相互に排他的なチェックボックスを 2 つ追加しました。ユーザーは、完全または未完了のチェッ​​クボックスをオンにして、データを表示できます。ローカルでは問題なく動作しますが、サーバーではうまく動作しません。最初は、状態を保持する前に、ユーザーはチェックボックスを 2 ~ 3 回クリックする必要があります。さらに、完了がチェックされ、ユーザーが次に未完了をチェックした場合、チェックマークは完了に戻ります。ユーザーはそれを 2 回行う必要があります。ここで何が間違っていますか?

チェックボックスのHTMLは次のとおりです

@Html.CheckBox("complete", SessionWrapper.currentEncounter.complete, new { id = "chkComplete", onclick = "chkInCompleteOption(1);this.form.submit();" }) <strong>Complete</strong>

@Html.CheckBox("Incomplete", SessionWrapper.currentEncounter.incomple, new { id = "chkInComplete", onclick = "chkInCompleteOption(2);this.form.submit();" }) <strong>Incomplete</strong>

//これがJavaScriptです

var completeCheck = '@SessionWrapper.currentEncounter.complete';
var inCompleteCheck = '@SessionWrapper.currentEncounter.incomplete';

 function chkInCompleteOption(e) {
        if (e == 1) {
            var cc = $('#chkComplete').is(':checked');
            var data = { "complete": cc, "inComplete": false };
                        var url = '@Url.Action("CompletedOption", "Orders")';
                        $.ajax({
                            url: url,
                            type: 'post',
                            dataType: 'text',
                            data: data,
                            success: function (data) {
                                testComplete();
                                return true;
                            },
                            error: function (error) {
                                alert("An error has occured.");
                                return false;

                            }
                        });

                    }
                    else if (e == 2) {
                        var inc = $('#chkInComplete').is(':checked')
                        var data = { "complete": false, "inComplete": inc };
                        var url = '@Url.Action("CompletedOption", "Orders")';
                        $.ajax({
                            url: url,
                            type: 'post',
                            dataType: 'text',
                            data: data,
                            success: function (data) {
                                testInComplete();
                                return true;
                                //  $('#chkComplete').removeAttr("checked", "checked");
                                //  $('#chkInComplete').attr("checked", "checked");

                            },
                            error: function (error) {
                                alert("An error has occured.");
                                return false;

                            }
                        });
        }


    }


function testInComplete() {
        if (inCompleteCheck == true) {
              inCompleteCheck =  $('#chkInComplete').attr("checked", "checked");
              document.getElementById('chkInComplete').checked = true;
        } else {
            $('#chkInComplete').removeAttr("checked");
        }
    }


    function testComplete() {
        if (inCompleteCheck == true) {
            completed = $('#chkComplete').attr("checked", "checked");
            document.getElementById('chkComplete').checked == true;
        } else {
            $('#chkComplete').removeAttr("checked");
        }
    }

//サーバー側で相互に排他的な値を設定

public bool CompletedOption(bool complete, bool inComplete)

            if (inComplete == true && complete == true)
            {
                return false;
            }

            if (complete == true)
            {
                SessionWrapper.currentEncounter.complete = true;
            }
            else if (SessionWrapper.currentEncounter.complete == true && (complete == null || inComplete == null))
            {
                SessionWrapper.currentEncounter.complete = true;
            }
            else
            {
                SessionWrapper.currentEncounter.complete = false;
            }


            if (inComplete == true)
            {
                SessionWrapper.currentEncounter.incomplete = true;
            }
            else if (SessionWrapper.currentEncounter.incomplete == true && (complete == null || inComplete == null))
            {
                SessionWrapper.currentEncounter.incomplete = true;
            }
            else
            {
                SessionWrapper.currentEncounter.incomplete = false;
            }


            return true;
        }
4

1 に答える 1

0

問題が見つかりました。サーバー側は適切に更新されていました。ただし、ajax は実行されるたびにエラー メッセージを返していました。サーバー側のメソッドは、文字列が予期されるときにブール値を返していました。また、async と cache を false に設定しました。アプリケーションを再度実行したところ、動作しました。

// メソッド シグネチャをブール値から文字列に変更します

public string CompletedOption(bool complete, bool inComplete)
{
  return "true";
}

アヤックスポスト

$.ajax({
            url: url,
            type: 'post',
            dataType: 'text',
            async: false, //Added
            cache: false, //Added
            data: data,
            success: function (data) {
                  return data;
            },
            error: function (error) {
                alert("An error has occured.");
                return false;
            }
        });
于 2013-09-24T18:40:31.963 に答える