0

我对 MVC 很陌生,所以这个问题可能听起来很愚蠢,但无论如何我需要理解这个概念:

在 asp.net mvc4 中,假设我有一个视图,在该页面上我有一个 kendo UI 控件,在这种情况下,我从演示中看到的只是使视图具有模型的强类型,如下所示:

<%@ 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>

但是如果我有多个控件并且它们需要不同的模型怎么办?那么我该如何进行数据绑定呢?在这种情况下,我看到了一些其他演示使用 viewbag 将数据从控制器传递到视图,但是可以不使用 viewbag 吗?

谢谢

4

1 回答 1

0

我使用的一种方法是将视图所需的所有强绑定数据移动到一个新类中,并将其命名为 ProductPageViewModel 之类的东西。

这个新的 ViewModel 将允许您在视图中拥有尽可能多的强绑定数据。让您避免使用 ViewBag。

在您的 Action 方法中,您将填充 ProductPageViewModel 对象而不是 ProductViewModel 枚举。

下面看一下我将如何构建新 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 回答