0

我有一个复选框和文本框的列表。我想让用户通过部分视图模式弹出窗口将项目添加到列表中。

用户将项目添加到列表后,如果原始视图中的任何项目中有值,我希望它们保留,并使用添加的项目刷新页面。

我想将完整模型从原始视图发送回控制器,然后我可以将新项目添加到该模型并将模型传递回原始页面并保留我的所有值。

我可以获取所有值并通过循环等在 javascript 中传递它们(非常乏味),但我认为完整模型将是最简单的方法。

我在此处的帖子中看到了 Laviak 的链接...,但我无法使其正常工作。

它声明....如果您需要将完整模型发送到控制器,您首先需要该模型可用于您的 javascript 代码。

在我们的应用程序中,我们使用扩展方法执行此操作:

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

在视图上,我们使用它来渲染模型:

<script type="javascript"> 
  var model = <%= Model.ToJson() %> 
</script> 

然后,您可以将模型变量传递给您的 $.ajax 调用。

有没有人让这个工作???

谢谢比尔

4

1 回答 1

3

你可以这样做:

<script type="text/javascript">
    var dataViewModel = @Html.Raw(Json.Encode(Model)); //Make sure you send the proper model to your view

    function MethodPost(param1, param2, etc...) {

    dataviewModel.Param1 = param1; //Or load a value from jQuery
    dataviewModel.Param2 = $("#param2").val();

    }

    //Pass it to a controller method
    $.post("@Url.Action(MVC.Home.PostMethodInController())", { viewModel: JSON.stringify(dataViewModel)} , function(data) {
        //Do something with the data returned.
    }
</script>

在控制器中,您可以使用nuget上提供的 Json.Net获取您的类/模型。

    public virtual ActionResult Index()
    {
        return View(new MyModelToView());//Send at least an empty model
    }

    [HttpPost]
    public virtual JsonResult PostMethodInController(string viewModel)
    {
        var entity = JsonConvert.DeserializeObject<MyObject>(viewModel);

        //Do Something with your entity/class

        return Json(entity, JsonRequestBehavior.AllowGet);
    }

希望这可以帮助。

于 2012-07-21T00:27:20.647 回答