0

私はMVCにまったく慣れていないので、質問はばかげているように聞こえるかもしれませんが、とにかく概念を理解する必要があります:

asp.net mvc4 では、ビューが 1 つあるとします。そのページには、剣道 UI コントロールが 1 つあります。この場合、デモから見たのは、以下のようにモデルで強く型付けされたビューを作成することだけです。

<%@ Page Title="" Language="C#" MasterPageFile="~/Areas/aspx/Views/Shared/Web.Master"
Inherits="System.Web.Mvc.ViewPage<IEnumerable<Kendo.Mvc.Examples.Models.ProductViewModel>>" %>

次に、ページ内でデータを次のようにバインドします。

<div class="demo-section">
<%: Html.Kendo().ListView<Kendo.Mvc.Examples.Models.ProductViewModel>(Model)
    .Name("listView")
    .TagName("div")
    .ClientTemplateId("template")
    .DataSource(dataSource => {
        dataSource.Read(read => read.Action("Products_Read", "ListView"));
        dataSource.PageSize(15);
    })
    .Pageable()
%>
</div>

しかし、複数のコントロールがあり、それらに異なるモデルが必要な場合はどうすればよいでしょうか? それでは、どうすればデータバインディングを行うことができますか? この場合、ビューバッグを使用してコントローラーからビューにデータを渡す他のデモを見ましたが、ビューバッグを使用しないことは可能ですか?

ありがとうございました

4

1 に答える 1

0

私が使用したアプローチは、ビューが必要とする強力にバインドされたすべてのデータを新しいクラスに移動し、それを ProductPageViewModel のような名前にすることです。

この新しい ViewModel を使用すると、ビュー内で必要なだけ強くバインドされたデータを持つことができます。ViewBag を使用する必要がなくなります。

Action メソッドでは、ProductViewModel 列挙の代わりに ProductPageViewModel オブジェクトを設定します。

新しい ViewModel を構築する方法のサンプルを以下に示します。

public class ProductPageViewModel
{
  public IEnumerable<Kendo.Mvc.Examples.Models.ProductViewModels> Products { get; set; }
  public List<SelectListItem> SelectList { get; set; }
  public bool IsAdditionalProperty { get; set; }
}

ビューの宣言は次のようになります。

<%@ Page Title="" Language="C#" MasterPageFile="~/Areas/aspx/Views/Shared/Web.Master"
Inherits="System.Web.Mvc.ViewPage<Kendo.Mvc.Examples.Models.ProductPageViewModel>" %>

次に、ページで次のようにバインドできます。

<div class="demo-section">
<%: Html.Kendo().ListView<Kendo.Mvc.Examples.Models.ProductViewModel>(Model.Products)
    .Name("listView")
    .TagName("div")
    .ClientTemplateId("template")
    .DataSource(dataSource => {
        dataSource.Read(read => read.Action("Products_Read", "ListView"));
        dataSource.PageSize(15);
    })
    .Pageable()
%>
</div>
<div>
 <%= Html.Kendo().DropDownList()
      .Name("selectList")
      .DataTextField("Text")
      .DataValueField("Value")
      .BindTo(Model.SelectList)
%>
</div>
于 2013-06-17T19:32:55.307 に答える