Пытаясь передать модель до частичного, как мне это сделать? - PullRequest
0 голосов
/ 16 декабря 2009

Мое действие создает строго типизированные данные представления, которые передаются в мое представление.

В представлении я передаю модель методу частичного рендеринга.

public ActionResult Index()
{
            ViewDataForIndex vd = new ViewDataForIndex();

            vd.Users = Users.GetAll();

            return View(vd);
}


public class ViewDataForIndex: ViewData
    {
          public IList<User> Users {get;set;}

    }

сейчас в поле зрения:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<ViewDataForIndex>" %>

<% Html.RenderPartial("~/controls/blah.ascx", ViewData.Model); %>

и в blah.ascx:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
  1. как мне получить доступ к моей модели сейчас?
  2. если бы я хотел создать строго типизированный класс для своего ViewUserControl, как бы я это сделал? наследовать от?

Ответы [ 3 ]

0 голосов
/ 16 декабря 2009

Мне больше нравится второй подход @ jfar, так как он упрощает модификацию, если вы когда-нибудь решите передать более сложную модель в представление.

Таким образом, вы можете передать класс с несколькими свойствами и / или несколькими дочерними объектами.

Если вы наследуете от объекта сейчас, все, что вам нужно сделать, это наследовать от вашего сложного объекта и изменить один фрагмент кода, а также добавить новые свойства и все готово.

0 голосов
/ 16 декабря 2009

Более конкретно на ответ jfar:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<ViewDataForIndex>" %>

Если ваша родительская страница имеет модель типа ViewDataForIndex, вызов дочернего элемента с тем же ViewData.Model также передаст объект типа ViewDataForIndex.

0 голосов
/ 16 декабря 2009

Один: Внутри ascx:

   <%= Model.YourProperty %>

Два: предоставить аргумент типа для ViewUserControl:

   <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<String>" %>
...