2012-07-21 27 views
0

我有一個複選框和文本框的列表。我想讓用戶通過局部視圖模式彈出框將項目添加到列表中。如何將MVC中的完整模型從視圖傳遞給控制器​​jquery c#應用程序

用戶向列表中添加項目後,如果原始視圖中的任何項目都有值,我希望它們保留,並且頁面會刷新添加的項目。

我想將完整模型從原始視圖發送回控制器,然後我可以將新項目添加到該模型,並將模型傳回原始頁面並保留所有值。

我可以抓住所有的值,並通過循環等JavaScript(非常乏味),但我認爲整個模型將是最簡單的方法。

我從Laviak發帖從here ......的帖子,但我無法讓它工作。

它聲明.... 如果您需要將FULL模型發送到控制器,您首先需要該模型可用於您的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調用。

有沒有人得到這個工作?

感謝 比爾

+0

http://stackoverflow.com/questions/7910033/asp-net-mvc-passing-model-to-controller-with-ajax – Oded 2012-07-23 08:52:07

回答

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> 

在控制器您在使用Json.Net這可以用的NuGet類/模型中獲取。

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

希望這會有所幫助。

相關問題