我有一个呈现部分视图的控制器动作:
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。
所以:
我会很感激我如何最好地实现这一目标。
所有load所做的就是返回HTML从服务器,那么为什么不只是追加到一个临时DIV,然后从中获得HTML上的成功?
load
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。
status != "success"
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将发挥作用。
an error occured