0

我的 Person 模型有一个 Index、一个 GET Create 和 POST Create 操作。我在父视图中显示索引,因此它被称为 ChildAction。

我想要做的是将 GET Create as a ChildAction 调用到同一个父视图或索引视图中。然后在提交创建表单时,我希望刷新索引。

我该如何实施呢?我一直在使用 Ajax.BeginForm 来解决这个问题,但它似乎多次发布到 Create 操作,所以我认为我的尝试是有缺陷的。我的主要问题是在创建 POST 成功时刷新索引操作。Create POST 应该返回什么?

所有帮助和建议表示赞赏。

4

2 回答 2

1

我不知道我是否完全理解你的问题,但我认为它可能会帮助你喜欢你使用成功:function(data){ ... some code ...} 你还必须在这里使用另一个属性

onComplete : function (data){ ... some code ...}

现在只需编写您想要在 ajax 调用完成后执行的代码。但是把它写在完整的函数中

于 2012-10-04T13:25:11.133 回答
0

这是如何设置的:

public class HomeController : Controller
{
    public ActionResult MainAction()
    {
        return View();
    }

    [ChildActionOnly]
    public ActionResult Index()
    {
        return PartialView();
    }

    [ChildActionOnly]
    public ActionResult Create()
    {
        return PartialView();
    }

    [HttpPost]
    public ActionResult ProcessCreate(SomeViewModel model)
    {
        return PartialView("Index");
    }
}

以及相应的观点:

~/Views/Home/MainAction.cshtml

<div>
    This is the main view
</div>

<div id="indexContainer">
    @{Html.RenderAction("Index");}
</div>

~/Views/Home/Index.cshtml

<div>
    This is the index view @DateTime.Now.ToLongTimeString()
</div>

<div>
    @{Html.RenderAction("Create");}
</div>

~/Views/Home/Create.cshtml

@using (Ajax.BeginForm("ProcessCreate", "Home", new AjaxOptions { UpdateTargetId = "indexContainer" }))
{
    <button type="submit">OK</button>
}

另外不要忘记包含jquery.unobtrusive-ajax.min.jsAjax.* 助手工作的脚本:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>

你会注意到我已经重命名了 Create POST 动作,否则当 Html.RenderAction 助手在表单回发后被调用时,它将再次执行 POST 动作,你将陷入无限循环。

于 2012-10-04T13:17:42.490 回答