当前位置: 首页 > 面试题库 >

ASP.NET MVC使用jQuery Ajax渲染部分视图

韩阳云
2023-03-14
问题内容

我有一个呈现部分视图的控制器动作:

public ActionResult Details(int id)
{
    DetailsViewModel model = 
        ModelBuilder.GetDetailsViewModel(id, _repository);
    return PartialView("Details", model);
}

然后将返回的内容加载到动态元素中,如下所示:

$container = appendContainer(); // adds a div to the dom with the correct id
$container.load("MyController/Details", function(response, status, xhr) {
    if (status != "success") {
        $(container).html('an error has occured');
    }
});

因此,这将创建一个div,然后将返回的内容加载到该div中。

我想对此稍作更改,以便仅在对控制器的调用成功的情况下创建容器div。

所以:

  1. jQuery调用控制器动作
  2. 控制器返回PartialView,如果找不到ID,则返回null
  3. 如果返回PartialView,则将创建容器并使用返回的内容加载该容器。
  4. 如果控制器找不到ID,则不会创建任何内容并显示警报。

我会很感激我如何最好地实现这一目标。


问题答案:

所有load所做的就是返回HTML从服务器,那么为什么不只是追加到一个临时DIV,然后从中获得HTML上的成功?

var $dummy = $("<div>");
$dummy.load("MyController/Details", function(response, status, xhr) {
    var $container = appendContainer();
    if (status != "success") {
        $container.html('an error has occured');
    }
    else
    {
        $container.html($dummy.html());
    }
    $dummy.remove();
});

更新:

如果您期望出现异常,则应该处理它。如果您基本上只是允许错误发生status != "success",那是一种严重的代码味道。您应该捕获该错误并返回另一个PartialView。

public ActionResult Details(int id)
{
    try
    {
        DetailsViewModel model = 
            ModelBuilder.GetDetailsViewModel(id, _repository);
        return PartialView("Details", model);
    }
    catch (SomeException ex)
    {
        return PartialView("Error", ex.Message);
    }
}

这样就可以确保始终获得有效的HTML响应,否则,您的基本错误an error occured将发挥作用。



 类似资料:
  • 问题内容: 我检查了这个问题,它解决了我的最初问题。但是我不希望仅当用户单击链接时才显示部分视图,我希望在页面加载时显示部分视图,并且可能在加载部分视图时显示进度指示器。 如何实现? 非常感谢您阅读本文。 问题答案: 如果要加载页面,然后通过ajax加载部分视图,则可以创建一个执行以下操作的对象: 然后在您的页面中执行以下操作:

  • 问题内容: 我在MVC应用程序中有此标记。 当它运行时,IngredientsListControl.ascx在浏览器中显示为新页面,并且不会更新Ingredientlistdiv。 这是我的控制器动作 我在这条线上做对了吗? 这就是我将控件呈现到div中的方式,以便它不会加载新页面。 马尔科姆 问题答案: 使用此功能时: …您应该注意,这与 它不会引发onsubmit事件,并且不会调用MVC的A

  • 问题内容: 我有一些记录。单击每条记录后,需要在手风琴中显示信息。 该信息应该从数据库动态获取。 到目前为止,我所做的是 创建局部视图。那是为了显示详细信息。 在记录上单击后,我调用jquery方法并在控制器上执行我的方法。控制器以Json的形式返回对象(或任何其他东西,打开以获取任何建议)。 现在,JQuery方法具有该(模型)对象,但是如何使用它来呈现其局部视图。 问题答案: 我有一些记录。单

  • 问题内容: 如何使用jquery渲染局部视图? 我们可以这样渲染部分视图: 我们如何使用jquery做同样的事情? 问题答案: 我已经使用ajax加载来做到这一点:

  • 我正在尝试将过滤器(如Instagram的过滤器)应用于现有视频。 我使用GLSURFACHEVIEW显示视频帧,并希望通过对传入帧应用特定过滤器,使用onDrawFrame()渲染每个帧。 但是在onDrawFrame()中,如何获取传入帧? 谢谢

  • Blade 内部内置了一个非常简单的模板渲染引擎,如果你有一些简单的页面需要渲染可以试试它(生产环境不适用)。 渲染一个模板需要遵守一条准则: 所有的模板文件都存储在 resources/templates 目录下 你可以调用 Response 方法的 render 方法渲染或者返回一个 String 类型的视图路径。 @GetRoute("/index") public void renderI