Asp.net mvc 3 将viewmodel传递给ajax控制器操作,该操作返回该模型的部分内容?

Asp.net mvc 3 将viewmodel传递给ajax控制器操作,该操作返回该模型的部分内容?,asp.net-mvc-3,jquery,model,partial-views,Asp.net Mvc 3,Jquery,Model,Partial Views,我有一个强类型的视图。在这个视图中,我有jqueryui选项卡,当单击它时,调用我的控制器并返回部分视图 ("#tab0").load('@Url.Action("ProfileImage", "User")'); public ActionResult ProfileImage() { return PartialView("_ProfileImage"); } 我想做的是将模型从“parent”视图传递到控制器,然后控制器可以在返回时将其绑定到partial: (

我有一个强类型的视图。在这个视图中,我有jqueryui选项卡,当单击它时,调用我的控制器并返回部分视图

("#tab0").load('@Url.Action("ProfileImage", "User")');

public ActionResult ProfileImage()
{
            return PartialView("_ProfileImage");
}
我想做的是将模型从“parent”视图传递到控制器,然后控制器可以在返回时将其绑定到partial:

("#tab0").load('@Url.Action("ProfileImage", "User", new {model=model})');

public ActionResult ProfileImage(UserViewModel model)
{
            return PartialView("_ProfileImage", model);
}

这可能吗?这通常是如何做到的?如果您在一个视图中有模型数据,并且希望将其传递给异步加载的局部视图?

您可以在viewmodel上创建一个ToJson方法,该方法可以是这样的:

        public IHtmlString ToJson()
        {
            return MvcHtmlString.Create(Json.Encode(this));
        }
("#tab0").load('@Url.Action("ProfileImage", "User", new {model=model.ToJson()})');
它只是将viewmodel序列化为json。IHtmlString returntype确保输出未在视图中编码。 对控制器的调用如下所示:

        public IHtmlString ToJson()
        {
            return MvcHtmlString.Create(Json.Encode(this));
        }
("#tab0").load('@Url.Action("ProfileImage", "User", new {model=model.ToJson()})');

json modelbinder可以在服务器端重新创建viewmodel。您可能会在过程中遇到一些问题,但我想没有什么是无法解决的。

嘿,谢谢,在.Net中不是有一个toJson,或者它不起作用吗?据我所知不是这样,但在这种情况下,您肯定要返回一个IHtmlString,否则您的模型会因为编码而出错。有一个东西是Json.Encode。。似乎对它进行了编码。但是我想知道使用这个jquery加载函数是否是处理这个问题的错误方法。也许我应该构建一个ajax查询??加载函数是最简单的,但是如果你想要更流畅的用户体验,你应该让控制器只返回一个json结果,并使用jquery模板()构建视图。在这种情况下,你必须使用ajax查询。实际上,问题可能是使用@Url.Action()。。我是mvc新手,看起来这个助手用querystring参数构建了一个url。。我使用的控制器函数需要一个JSON视图模型。所以我猜querystring URL不会起作用。