0

我创建了一个基本的 MVC 应用程序。

对于主视图,我创建了一个 Create.cshtml 页面:

<h2>title Create</h2>

在家庭控制器上,我添加了 get 方法:

public ActionResult Create(int id)
        {
            return View();
        }

在我的 Index.cshtml 视图中,我有:

@{
    ViewBag.Title = "Home Page";
}
<h2>@ViewBag.Message</h2>
<p>
    To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">
        http://asp.net/mvc</a>.
</p>
<div class="clicky">click me</div>
<script type="text/javascript">
    $(function () {
        $(".clicky").click(function () {
            $.get('@Url.Action("Create")', { id: "1" }, function () {

            });
        });
    });
</script>

想象一下当我运行它时我的惊讶,发现当点击我时,屏幕没有改变。

我在 Create 上放了一个断点,发现这个方法确实被输入了。萤火虫也没有任何错误迹象。

然后我将脚本更改如下:

<script type="text/javascript">
        $(function () {
            $(".clicky").click(function () {
                //$.get('@Url.Action("Create")', { id: "1" }, function () {

                //});

                window.location.href = '/Home/Create/1';
            });
        });
    </script>

该应用程序现在按预期工作,返回 Create 视图。

有人可以向我解释为什么我以前的方法不起作用吗?

4

1 回答 1

3

您以前的方法向服务器发送异步请求。返回的数据(在这种情况下是您呈现的创建视图)被传递回您的 javascript 回调方法,该方法在您的示例中为空:

$.get('@Url.Action("Create")', { id: "1" }, function (data, textStatus, jqXHR) {

});

尝试将参数添加到回调函数并在函数处设置 javascript 断点。您将看到,html 是在 data 参数中传递的。您可以使用它在某些 div 或对话框中呈现它,如下所示:

function (data, textStatus, jqXHR) {
    // simply put it in a div
    $("#mydiv").html(data);
    // or open a jquery dialog
    $("#mydiv").html(data).dialog();
});

或者您可以使用其中一个Ajax助手,例如Ajax.ActionLink

于 2012-09-07T09:20:36.183 回答