在MVC 3中使用ajax的模型对象帖子

时间:2013-09-03 10:42:42

标签: ajax asp.net-mvc-3

是否可以在asp.net mvc 3中使用ajax查询发送模型对象?我尝试这个代码,但它无法正常工作。

   $.get($(target).data('path')+'list/'+@ModelpagedList.ParentID+'?page='+page+'?searchObject='+@Model, function (data) {
            $(target+' .data-content').unblock();    


            window.setTimeout(function()
            {
                $(target).replaceWith(data);
            },200);

        });
        return false;

我想发送searchParam=@Model

2 个答案:

答案 0 :(得分:4)

  

是否可以在asp.net mvc 3中使用ajax查询发送模型对象

当然,您可以将其作为JSON发布:

var url = $(target).data('path') + 'list/' + @ModelpagedList.ParentID;
var data = {
    page: page,
    searchObject: @Html.Raw(Json.Encode(Model))
};

$.ajax({
    url: url,
    type: 'POST',
    data: JSON.stringify(data),
    contentType: 'application/json',
    success: function(result) {
        $(target + ' .data-content').unblock();    
        window.setTimeout(function() {
            $(target).replaceWith(data);
        }, 200);
    }
});

您的控制器操作将如下所示:

[HttpPost]
public ActionResult SomeAction(int parentId, int page, MyViewModel searchObject)
{
    ...
}

但恕我直言,所有这些努力都没有必要。不需要像这样浪费你的带宽。只需发送允许它从后端检索它的模型的标识符 - 就像在渲染视图时最初检索它一样:

[HttpPost]
public ActionResult SomeAction(int id, int parentId, int page)
{
    ...
}

现在你只能发送模型的id,然后在你的控制器动作中使用id检索相应的模型对象。只有值得从客户端向服务器发送可能已被用户修改的信息。这不是你的情况。你只是让这个模型无用地四处旅行。

答案 1 :(得分:1)

创建一个将对象转换为json的扩展方法

public static class JsonExtensions
{
    public static string ToJson(this Object obj)
    {
        return new JavaScriptSerializer().Serialize(obj);
    }
}

然后

   var model = <%= Model.ToJson() %>

$.get($(target).data('path')+'list/'+@ModelpagedList.ParentID+'?page='+page+'?searchObject='+model, function (data) {
            $(target+' .data-content').unblock();    


            window.setTimeout(function()
            {
                $(target).replaceWith(data);
            },200);

        });
        return false;