2017-11-14 9 views
0

講師が、ひげそりの構文を正しい文字列に変換するためのクラスを作成するチュートリアルに従っています。JSONを文字列にレンダリングしてJSONを返す方法

public static string RazorToString(Controller controller , string viewName , object model = null) 
     { 
      controller.ViewData.Model = model; 
      using(var sw = new StringWriter()) 
      { 
       ViewEngineResult viewResult; 
       viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName); 
       var viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw); 
       viewResult.View.Render(viewContext, sw); 
       viewResult.ViewEngine.ReleaseView(controller.ControllerContext, viewResult.View); 
       return sw.GetStringBuilder().ToString(); 
      } 
     } 

コントローラのアクションでは、彼はこのようにjSONを返します。

return Json(new { success = true, html = RazorViewToString.RazorToString(this,"GetAll" ,), message = "submitted succesfully" }, JsonRequestBehavior.AllowGet); 

GETALLレコードのリストを返して、彼は渡されたアクションメソッドです。これはすぐ下にあります。

public ActionResult GetAll() 
     { 
      using (DBModel db = new DBModel()) 
      { 
       var list = db.Employees.ToList(); 
       return View(list); 
      } 
     } 

これ以上の方法は、その中に私は意味の違いは、インストラクターが個別にリストを取得し、彼は私の実装でそのmethod.butと呼ばれるこのアクションメソッドでは、私が直接としてリストをreturingされているメソッドを作成しましたチュートリアルですあなたは上記の通りです。

RazorViewToString.RazorToString(this,"GetAll" ,) 

私が作成していない方法を渡しました。私はここに渡す必要がありますか?誰かが上記の機能を説明できる場合は、私は彼に感謝します。 #Peace

答えて

1

2番目のパラメータはメソッド名ではなく、ビュー名です.3番目のパラメータは、そのビューに必要なビューモデル/モデルです。

GetAll.cshtmlのように見えます。表示は、Employeesのリストに強く入力されています。だからあなたはそれをモデルパラメータ値として渡すべきです。

var employeeList = db.Employees.ToList(); 
return Json(new { success = true, 
        html = RazorToString(this, "GetAll",employeeList), 
        message = "submitted succesfully" },JsonRequestBehavior.AllowGet); 

これはRazorToStringメソッドを呼び出しますし、メソッド内で、我々は手動かみそりビューエンジンを実行しているし、それがビューによって生成されるHTMLマークアップされた文字列を返します。 successhtmlmessageという3つのプロパティを持つ匿名オブジェクトを作成し、それをJsonメソッドに渡します。これにより、対応するjson形式に変換されます。

関連する問題