Html.RenderAction 和 Angular

Html.RenderAction with Angular

我试着写下类似的东西;

Html.RenderAction("Reviews", "Poetry", new { id = "{{ poetry.ID }}" });

但它给出了类似 "The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.PartialViewResult"

的错误

但是如果我像下面这样写就可以了;

var url = Url.Action("Reviews", "Poetry", new { id = "{{ poetry.ID }}" });

如何在 Html.RenderAction 方法中传递 angular 值?

假设您有这样的控制器操作:

public class PoetryController : Controller
{
    public PartialViewResult Reviews(int id)
    {
        // do something
    }
}

RenderAction 方法在发送到客户端浏览器之前从服务器解析和呈现,因此您的第一种方法 不可能 因为 Angular 表达式服务器端代码无法将 {{ poetry.ID }} 正确解析为操作参数,因此它作为 null 传递并抛出不可为 null 的参数异常,因为 id 声明为 int,而不是 Nullable<int> .

假设你想使用 Angular 值(或 JS 值)加载部分视图,通常在控制器内部使用 $http() 函数,然后调用包含 HTTP 请求的函数名:

Razor 中的 JS 变量

var pageUrl = '@Url.Action("Reviews", "Poetry")';

Angular函数

$http({
    method: 'GET',
    url: pageUrl,
    params: {
        id: poetry.ID
    }).then(function (response) {
        // load partial view here
        angular.element('#targetElement').html(response);
    });

或使用简写 $http.get() 因为 RenderAction 需要 GET 方法来呈现部分视图内容:

$http.get(pageUrl + '?id=' + poetry.ID).then(function (response) {
    // load partial view here
    angular.element('#targetElement').html(response);
});