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 に答える