2009-11-26 4 views
0

Вместо:За написание ViewDataDictionary в ASP.NET MVC рамках

public ActionResult Index() 
{ 
    ViewData["foo"] = _repository.GetFoos().ToList(); 
    ViewData["bar"] = new string[] { "blah" }; 
    ViewData["baz"] = ""; 
    return View(); 
} 

, а затем:

public ActionResult Index(string baz) 
{ 
    // Do stuff... 

    ViewData["foo"] = _repository.GetFoos().ToList(); 
    ViewData["bar"] = new string[] { "blah" }; 
    ViewData["baz"] = baz; 
    return View(); 
} 

Я думал о том, чтобы сократить количество ошибок опечатки, делая ViewData немного более структурированным, не добавляя (пока) еще один класс ViewModel. Я придумал следующее:

public ActionResult Index() 
{ 
    var foo = _repository.GetFoos().ToList(); 
    var bar = new string[] { "blah" }; 
    var baz = null; 

    ViewData = new ViewDataDictionary { 
     {"foo", foo}, 
     {"bar", bar}, 
     {"baz", baz } 
    }; 

    return View(); 
} 

public ActionResult Index(string baz) 
{ 
    var foo = _repository.GetFoos().ToList(); 
    var bar = new string[] { "blah" }; 
    var baz = null; 

    // Do Stuff... 

    ViewData = new ViewDataDictionary { 
     {"foo", foo}, 
     {"bar", bar}, 
     {"baz", baz} 
    }; 

    return View(); 
} 

Неплохо ли переписывать ViewData как это? Я уверен, что это не вызовет проблем с RenderPartials, но не смог бы я теперь назвать RenderAction?

+1

Я бы использовал подход модели представления, а не то, что вы предлагаете здесь. Модель просмотра представляет собой слой абстракции, который выплачивает дивиденды, когда вы должны вносить изменения. Кроме того, он позволяет строго набирать вид, который обеспечивает intellisense и более самодокументирующийся. Помимо этого, я считаю, вы все равно можете позвонить RenderAction. Это будет просто случай того, как/какие данные вы хотите передать в вызов RenderAction. – ChrisP

ответ

1

Неплохо ли переписывать ViewData?

Нет. Это неплохая идея. Но это не распространено.

Я уверен, это не вызовет проблем с RenderPartials, но я бы больше не быть в состоянии назвать RenderAction в зрения?

У вас должно быть все в порядке.

Но у вас есть код на вашем коде без перезаписи ViewData и после.

Вы не устранили ни одной опечатки erro r. У вас есть одинаковое количество магических строк в обоих случаях.

Так что я бы все еще рекомендовать, чтобы добавить ViewModel. Для простоты просто определите свой ViewModel в классе контроллера, чтобы все было в одном месте.

+0

Хмм, это дает мне другую (возможно сумасшедшую) идею. Я мог бы установить контроллер в качестве модели и использовать переменные public экземпляра в представлении. Это было бы очень похоже на рельсы. –

+0

На самом деле, мне очень нравится путь возвращения. (Это) чувствует ... –

+0

Хм, это еще один вариант. Я не думаю, что это слишком плохо. Но это нарушает SRP. –

Смежные вопросы