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

Sam*_*tar 2 asp.net-mvc jquery asp.net-mvc-3

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

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

1)使用AJAX调用我的控制器行动,检查是否是使用Request.IsAjaxRequest一个Ajax请求,返回HTML.Partial到调用Ajax和有更新的HTML的JavaScript.我已经有90%的工作方法了.

上一个stackoverflow问题

2)使用以下内容:

<div id="#thingy">@Html.Action("Detail", new { ac, me })</div>  
$('#thingy').load("@Server.JavaScriptStringEncode(Url.Action("Detail", new { ac, me }))"); 
Run Code Online (Sandbox Code Playgroud)

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

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

jim*_*lan 5

梅丽莎,

我几乎肯定坚持使用部分视图(和@RenderPartial())如果视图中的模型与部分视图中的模型相同,否则您可以选择@RenderAction()帮助程序在您的视图中调用数据刷新,其中基本数据类型与基本视图数据类型.

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

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

// this is a div contained within the main Detail.cshtml view
<div id="#thingy">@Html.RenderPartial("_Detail", Model)</div>
Run Code Online (Sandbox Code Playgroud)

这将在第一次传递时自动填充模型中的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); 
}
Run Code Online (Sandbox Code Playgroud)

希望这是有道理的.

祝好运