带有Angular的Html.RenderAction

时间:2019-02-28 14:06:30

标签: asp.net-mvc angular renderaction

我尝试写如下内容;

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

但是会出现类似“参数字典为方法'System.Web.Mvc.PartialViewResult包含非空类型'System.Int32'的参数'id'的空条目”的错误提示

但是,如果我在下面写类似的东西,就可以了;

{{1}}

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

1 个答案:

答案 0 :(得分:1)

假设您具有以下控制器操作:

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

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

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

Razor中的JS变量

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

角度功能

$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);
});