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) 或让您的 Create 操作返回 aPartialView而不是View避免在对话框中获取完整布局。

您的代码的另一项改进是替换以下硬编码锚:

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

使用 html 帮助程序来确保它生成符合您的路由配置的正确 url:

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