1

Knockout js ビューモデルがあり、外部テンプレートを使用して MVC 4 カミソリ (cshtml) バインド ページを取得し、最初のページをサーバー上で作成するか、Knockout を介してバインドできるようにしたいと考えています。実行時に決定します。テンプレートの名前をこのようにコントローラーに渡したい (/Templates/KnockoutTemplate?templateName='gauge') ここで、'gauge' はビューの名前 (radial.tmpl.cshtml) で、Knockout にそれをテンプレートブロック。

私のコントローラー:

public class TemplatesController : Controller
{
     public TemplatesViewModel viewModel { get; set; }
     public TemplatesController()
     {
        this.viewModel = new TemplatesViewModel { Heading = "Radial" };
     }

    public ActionResult KnockoutTemplate(string templateName)
    {
        // is this right?
        return  PartialView(templateName, this.viewModel);
    }
}

Radial.cshtml

   @model MVC4.Models.TemplatesViewModel
    @{
        ViewBag.Title = "Radial Template";
    }
    <div id="radialDashboardWidget" class="dashboardWidget" style="width: 100%">
     <h4 class="bold">@Model.Heading </h4>
     <!-- or I can do this, I'll decide at development time  -->
     <h4 class="bold" data-bind="text:heading"></h4>
    </div>

メインページ

<div id="dashboardWidgets" data-bind="foreach: Widgets" class="flexible-widget">
 <!-- ko template: {name: Properties.templateName  } -->
 <!-- /ko -->
 <div class="clear" />
</div>
4

2 に答える 2

2

ここでこれに答えました:http://geekswithblogs.net/Aligned/archive/2012/08/17/knockout-js-and-external-mvc-cshtml-templates.aspx

私のコントローラー:

public class TemplatesController : Controller
{
    public TemplatesViewModel viewModel { get; set; }

    public ActionResult KnockoutTemplate(string templateName)
    {
        return  PartialView(templateName.Replace("/", string.Empty), this.viewModel);
    }
}

Radial.cshtml

@model MVC4.Models.TemplatesViewModel
@{
    ViewBag.Title = "Radial Template";
}

<div id="radialDashboardWidget" class="dashboardWidget" style="width: 100%">
    <h4 class="bold" data-bind="text:@Model.Heading"></h4>
    <!-- add more HTML -->
</div>

ノックアウトを含むダッシュボード ページ

<div id="dashboardWidgets" data-bind="foreach: Widgets" class="flexible-widget">
    <!-- ko template: {name: Properties.templateName  } -->
    <!-- /ko -->
    <div class="clear" />
</div>
于 2012-11-14T22:11:18.150 に答える
0

何を達成したいのかわからない。cshtml では、クライアント側の JavaScript オブジェクトの監視可能なプロパティではなく、サーバー側の Model オブジェクトに対して「バインド」しています。そこではノックアウトを使用していません。Widgets オブジェクトを取得する Javascript を投稿してください。

于 2012-08-17T07:05:13.293 に答える