3

なぜこの問題が発生しているのかを理解しようとして、髪を引き裂いています。データを更新するためのポップアップフォームとしてjQuery-uiモデルダイアログボックスを使用しています。これは、実際のフォームを含むダイアログdiv内にdivを配置しようとするまでは、問題なく機能します。モーダルを開くことは正常に機能しますが、「キャンセル」ボタンを押すと、JavaScriptコンソールで次のエラーが発生します。

Uncaught TypeError: Object [object Object] has no method 'dialog'

また、ウィンドウが閉じることはありません。最後に、モーダルの右上にある[X]ボタンを押すと、ウィンドウは正常に閉じますが、モーダルを再度開こうとすると同じエラーが発生します。

関連するコードは次のとおりです。

ビュー内のDiv:

<div id="TacticInstanceModal" title="Update Tactic">
    <div id="addEditTacticsInstanceContent">
    </div>
</div>

ダイアログを初期化し、inner-divにデータを入力するJavascript:

var addEditTacticInstance = '@Url.Action("Edit", "TacticInstance")';
$('#updateTacticInstanceButton').live("click", function () {
    $('#TacticInstanceModal').dialog({
        resizable: false,
        modal: true,
        buttons: {
            Save: function () {
                $(this).dialog("close");
                SaveTacticInstance();
            },
            Cancel: function () {
                $(this).dialog("close");
            }
        }
    });

    $.get(addEditTacticInstance,
        { id: $(this).parent().parent().find('.tacticInstanceIdField').val() },
        function (data) {
            $('#addEditTacticsInstanceContent').html(data);
        });
});

部分ビューをロードするアクション:

public ActionResult Edit(int id = 0)
    {
        try
        {
            TacticInstance ti = null;

            if (id != 0)
            {
                ti = tacticInstanceRepository.GetSingle(x => x.TacticInstanceId == id);
                ti.Tactic = tacticRepository.GetSingle(t => t.TacticId == ti.TacticId);
            }
            else
            {
                ti = new TacticInstance();
                ti.TacticInstanceId = 0;
            }

            TacticInstanceViewModel tacticInstance = new TacticInstanceViewModel
            {
                TacticId = ti.TacticId,
                TacticInstanceId = ti.TacticInstanceId,
                StartDate = ti.StartDate,
                EndDate = ti.EndDate,
                CompletedDate = ti.CompletedDate,
                PropertyEnrollmentId = ti.PropertyEnrollmentId,
                TacticName = ti.Tactic.Name

                //TODO: Implement Assets
            };

            return PartialView("_AddEdit", tacticInstance);
        }
        catch (EntityException e)
        {
            ErrorSignal.FromCurrentContext().Raise(e);
            return View("Error");
        }
        catch (Exception ex)
        {
            ErrorSignal.FromCurrentContext().Raise(ex);
            return View("Error");
        }
    }

部分図:

@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)
    @Html.Hidden("TacticInstance_TacticId", @Model.TacticId)
    @Html.Hidden("TacticInstance_InstanceId", @Model.TacticInstanceId)
    @Html.Hidden("TacticInstance_PropertyEnrollmentId", @Model.PropertyEnrollmentId)

   <div class="editor-label">
        @Html.LabelFor(model => model.TacticName, new { @style= "font-weight:bold" } )
    </div>
    <div class="editor-field">
        @Html.Label("TacticInstance_Name", Model.TacticName.ToString(), new { id = "TacticInstance_Name" })
    </div>

    <div class="editor-label">
       @Html.LabelFor(model => model.StartDate, new { @style= "font-weight:bold" } )
    </div>
    <div class="editor-field">
        @Html.Label("TacticInstance_StartDate", String.Format("{0:MM/dd/yyyy}", Model.StartDate), new { id = "TacticInstance_StartDate" })
    </div>

    <div class="editor-label">
          @Html.LabelFor(model => model.EndDate, new { @style= "font-weight:bold" } )
    </div>
    <div class="editor-field">
        @Html.Label("TacticInstance_EndDate", String.Format("{0:MM/dd/yyyy}", Model.EndDate), new { id = "TacticInstance_EndDate" })
    </div>
    <div class="editor-label">
         @Html.LabelFor(model => model.CompletedDate, new { @style= "font-weight:bold" } )
    </div>
    <div class="editor-field">
        @Html.TextBoxFor(model => model.CompletedDate, new { id = "TacticInstance_CompletedDate" })
        @Html.ValidationMessageFor(model => model.CompletedDate)
    </div>
Html.EndForm();
}

これについて最も奇妙なことは、javascriptでajax .getをコメントアウトしても、生成された部分ビューHTMLをビューのdivにコピーして貼り付けると、問題なく機能することです。これは、問題がどこかにあると私に信じさせますが、私はhtmlを無駄に注入する複数のテクニックを試しました。

4

1 に答える 1

2

Html.EndForm();は必要ありません。これは</form>、html出力の最後に1秒を生成しています。また、パーシャルビューでjavascriptライブラリが返されていないことを確認してください。

于 2013-02-04T22:05:42.867 に答える