Вместо:За написание 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?
Я бы использовал подход модели представления, а не то, что вы предлагаете здесь. Модель просмотра представляет собой слой абстракции, который выплачивает дивиденды, когда вы должны вносить изменения. Кроме того, он позволяет строго набирать вид, который обеспечивает intellisense и более самодокументирующийся. Помимо этого, я считаю, вы все равно можете позвонить RenderAction. Это будет просто случай того, как/какие данные вы хотите передать в вызов RenderAction. – ChrisP