什么是刷新/更新MVC页面部分的最“MVC”标准方法?

我有一个显示数据表的网页。 我的页面上有一些关于某些元素的jQuery,当元素发生更改时,会对数据库进行Ajax调用,并在数据库中更新元素。

我还需要有时完全刷新数据网格。 在我看来,有两种方法可以做到这一点:

1)使用Ajax调用我的控制器操作,使用Request.IsAjaxRequest检查是否是Ajax请求,将HTML.Partial返回到调用Ajax的javascript并更新HTML。 我已经有90%的工作方法了。

上一个stackoverflow问题

2)使用以下内容:

@Html.Action("Detail", new { ac, me })
$('#thingy').load("@Server.JavaScriptStringEncode(Url.Action("Detail", new { ac, me }))");

现在我仍然试图让第一种方法工作,但也看第二种方法,并认为它看起来更容易。

我想编写有效的代码,但也想编写最符合MVC工作方式的代码。 考虑到这一点。 哪种方法最好? 我担心的一件事是@ Server.Java …代码。 我之前从未见过这个,我想知道如何用MVC处理这个问题,是否所有正常的安全性都得到了应用?

梅丽莎,

我几乎肯定坚持使用partialview(和@RenderPartial()如果视图中的模型与@RenderPartial()的模型相同,否则您可以选择@RenderAction()帮助程序来调用视图中的数据刷新基本数据类型与基本视图数据类型有很大不同。

您将从您的应用程序中了解哪种方法最适合所讨论的用例,但绝对是RenderPartial()将是主要的方法,其中ajax更新需要在稍后的部分更新html in div。

[编辑] – 这是我将如何在实践中看到这一点:

 // this is a div contained within the main Detail.cshtml view 
@Html.RenderPartial("_Detail", Model)

这将在第一次传递时自动填充模型中的div与名为_Detail.cshtml的partialview。 随后,您将调用您的ajax以通过按照上述方式返回部分视图和模型的操作来定位此相同的div(#thingy)。

即:

 public ActionResult Detail(string ac, string me) { vm.AdminDetails = _link.Detail(ac + me).ToList(); if (Request.IsAjaxRequest()) return PartialView("_Detail", vm); return View(vm); } 

希望这是有道理的。

祝好运