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

Я новичок в MVC, ASP.net и вообще в серверных скриптах.

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

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

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

ПРОСМОТР: <p><%= ViewData["PropertyName"] %></p>

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

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


person DarkLightA    schedule 10.01.2011    source источник
comment
Вы действительно должны придерживаться одного вопроса в сообщении. Я бы переместил вопрос Как используется Html.Encode () в отдельный вопрос, поскольку он не имеет отношения к оригиналу.   -  person Justin Niessner    schedule 10.01.2011


Ответы (4)


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

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

person Justin Niessner    schedule 10.01.2011

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

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

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

Просмотр (View / My / 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 %>
person hunter    schedule 10.01.2011
comment
Я предполагаю, что вы имели в виду <%=model.PropertyName %> вместо <%=Model.PropertyName %>? - person DarkLightA; 11.01.2011

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

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

person Rion Williams    schedule 10.01.2011

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

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

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

person Erik Noren    schedule 10.01.2011