0

ビューはダイアログに一瞬表示され、その後ダイアログが消え、JavaScriptが無効になっているようにメインサイトにビューが再び表示されます。

何が間違っていますか?コントローラで作成アクションを呼び出しているダイアログに作成ビューを表示したいだけです。

インデックスビュー:

@{
    Layout = null;   
 }

 <script type="text/javascript">

    $(function () {
        $('#dialog').dialog({
            autoOpen: false,
            width: 300,
            resizable: false,
            title: 'Create Template',
            modal: true,
            open: function(event, ui) {               
                $(this).load("@Url.Action("Create")");
            },
            buttons: {
                "Close": function () {
                    $(this).dialog("close");
                }
            }
        });

        $('#CreateTemplate').click(function ()
        {
            $('#dialog').dialog('open');
        });
    });

<div id="dialog" title="Create Template" style="overflow: hidden;"></div>
<div id="MenuBarDiv">   
    <a id="CreateTemplate" href="..\Template\Create">Create Template</a>
</div>
<div id="LeftDiv">
    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
    teimata sanctus est Lorem
    ipsum dolor sit amet.
</div>
<div id="RightDiv">
    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod
    tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero
    eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea

</div>
<div class="clear">
</div>

コントローラ:

  [HttpGet]
    public ActionResult Create()
    {
      return View("Create");
    }
4

1 に答える 1

1

アンカーのクリックハンドラーでは、デフォルトのアクションをキャンセルしていないため、ブラウザーは、ダイアログが表示される時間を残さずに、アンカーのhrefにリダイレクトするだけです。同じページに留まりたい場合は、falseを返すことによってこのデフォルトのアクションをキャンセルする必要があります。

$('#CreateTemplate').click(function () {
    $('#dialog').dialog('open');
    return false;
});        

また、Create.cshtmlパーシャルでレイアウト()をキャンセルしたか、ダイアログ内に完全なレイアウトが表示されないようにする代わりにLayout = null、作成アクションがを返すようにしていることを確認してください。PartialViewView

コードのもう1つの改善点は、次のハードコードされたアンカーを置き換えることです。

<a id="CreateTemplate" href="..\Template\Create">Create Template</a>

ルート構成を尊重して適切なURLを生成することを保証するhtmlヘルパーを使用します。

@Html.ActionLink(
    "Create Template",             // linkText
    "Create",                      // actionName
    "Template",                    // controllerName
    null,                          // routeValues
    new { id = "CreateTemplate" }  // htmlAttributes
)
于 2012-05-12T09:39:18.517 に答える