Альтернативы ViewData? - PullRequest
       20

Альтернативы ViewData?

1 голос
/ 10 января 2011

Я довольно новичок в MVC, ASP.net и, ну, в общем, серверных сценариях в целом.

Я смотрел учебное видео на www.asp.net/mvc, где человек объяснял шаблон. Он объяснил, что контроллер использует viewdata для отправки информации в представление.

Поправь меня, если я ошибаюсь, но я верю, что это было использовано так:

КОНТРОЛЛЕР: ViewData["PropertyName"] = value;

ВИД: <p><%= ViewData["PropertyName"] %></p>

Это правильное использование?

Что может быть лучше, чем использовать ViewData, и что в этом плохого?

Ответы [ 4 ]

3 голосов
/ 10 января 2011

Существуют очень ситуации просмотра, для которых я бы рекомендовал использовать коллекцию ViewData.

В большинстве случаев я бы использовал строго типизированные виды с отдельными моделями вида для каждого вида.

1 голос
/ 10 января 2011

Джастин прав в отношении использования ViewData, а также использования View Models (это определенно решение, которое, вероятно, наиболее соответствует вашим потребностям).

Session - это еще один вариант, но он может быть скользким, но вы просили альтернативы.

1 голос
/ 10 января 2011

Вместо использования ViewData лучшим подходом было бы создание нового объекта Model и передача его в View, который строго типизирован в Model.

Модель (Models / MyModels.cs)

public class MyModel
{
    public string PropertyName { get; set; }
}

Просмотр (Просмотр / Мой / Index.aspx)

<%@ Page Language="C#" Inherits="ViewPage<MyModel>" %>
<p><%=Model.PropertyName %></p>

Контроллер (Контроллеры / MyController.cs)

public class MyController : Controller
{
    public ActionResult Index()
    {
        MyModel model = new MyModel()
        {
            PropertyName = "My Property Name"
        };

        return View(model);
    }
}

Html.Encode можно использовать так:

<%=Html.Encode(someObject) %>

или это, если вы используете ASP.NET 4.0

<%: someObject %>
0 голосов
/ 10 января 2011

ViewData подходит для полных случайных данных, в которых вы не уверены, что вам понадобится.

Если вы создаете четкие представления, вам нужно использовать строго типизированные представления.Они позволяют вашему представлению наследовать от определенного бизнес-объекта (или, что более полезно, ViewModel) для отображения данных.В этой ситуации вместо ViewData ["SomeProperty"] вы можете иметь доступ к строго типизированному члену Model, например Model.SomeProperty.

Кроме того, Html.Encode предназначен для размещения элементов данных, которые повторяют пользователяданныеОн предназначен для предотвращения внедрения HTML.

...