मैं हाल ही में एमवीसी में काम कर रहा हूं, और मैं उत्सुक हूं कि मेरे दृश्य मॉडल को शुरू करने का सबसे अच्छा तरीका क्या है। क्या मुझे इसे नियंत्रक में सीधे मैप करना चाहिए, या मुझे व्यू मॉडल के लिए कन्स्ट्रक्टर में गुणों को प्रारंभ करना चाहिए। साथ ही, सूचियां होने पर, यह बेहतर अभ्यास है क्योंकि सत्यापन सत्यापन होने पर आपको उन्हें दोबारा नहीं करना पड़ेगा।.NET MVC3 पसंदीदा मॉडल प्रारंभिकरण
उदाहरण के लिए, अगर मैं निम्नलिखित मॉडल था:
public FooBarViewModel
{
public int FooBarId { get; set; }
public string SomeInitialProperty1 { get; set; }
public string SomeInitialProperty2 { get; set; }
public string SomeInitialProperty3 { get; set; }
public string SomeInitialProperty4 { get; set; }
public int FooId { get; set; }
public int BarId { get; set; }
public IEnumerable<Foo> Foos { get; set; }
public IEnumerable<Bar> Bars { get; set; }
}
और फिर नियंत्रक:
public MyController : Controller
{
[HttpGet]
public ActionResult FooBar(int foobarId)
{
var foobar = _fooBarRepository.GetById(foobarId);
var model = new FooBarViewModel
{
FooBarId = foobar.Id;
SomeInitialProperty1 = foobar.SomeInitialProperty1;
SomeInitialProperty2 = foobar.SomeInitialProperty2;
SomeInitialProperty3 = foobar.SomeInitialProperty3;
SomeInitialProperty4 = foobar.SomeInitialProperty4;
Foos = foobar.Foos.ToList();
Bars = foobar.Bars.ToList();
}
return View(model);
}
[HttpPost]
public ActionResult FooBar(FooBarViewModel model)
{
if (ModelState.IsValid)
{
//process model
return RedirectToAction("Index");
}
var foobar = _fooBarRepository.GetById(model.FoobarId);
model.Foos = foobar.GetFoos.ToList();
model.Bars = foobar.GetBars.ToList();
return View(model);
}
}
या मैं अपने मॉडल में यह करना चाहिए: तो
public FooBarViewModel
{
public int FooBarId { get; set; }
public string SomeInitialProperty1 { get; set; }
public string SomeInitialProperty2 { get; set; }
public string SomeInitialProperty3 { get; set; }
public string SomeInitialProperty4 { get; set; }
public int FooId { get; set; }
public int BarId { get; set; }
public IEnumerable<Foo> Foos
{
get { return _foos; }
}
private IEnumerable<Foo> _foos;
public IEnumerable<Bar> Bars
{
get { return _bars; }
}
private IEnumerable<Bar> _bars;
public MyViewModel(FooBar foobar)
{
FooBarId = foobar.Id;
SomeInitialProperty1 = foobar.SomeInitialProperty1;
SomeInitialProperty2 = foobar.SomeInitialProperty2;
SomeInitialProperty3 = foobar.SomeInitialProperty3;
SomeInitialProperty4 = foobar.SomeInitialProperty4;
_foos = foobar.Foos.ToList();
_bars = foobar.Bars.ToList();
}
}
मेरा नियंत्रक:
public MyController : Controller
{
[HttpGet]
public ActionResult FooBar(int foobarId)
{
var foobar = _fooBarRepository.GetById(foobarId);
var model = new FooBarViewModel(foobar);
return View(model);
}
[HttpPost]
public ActionResult FooBar(FooBarViewModelmodel)
{
if (ModelState.IsValid)
{
//process model
return RedirectToAction("Index");
}
return View(model);
}
}
एमवीसी में पसंदीदा परंपरा कौन सा है और यह सबसे अच्छा अभ्यास क्यों है? इसके अलावा, दूसरे पर एक का चयन क्यों करें? अग्रिम में धन्यवाद।
+1। यहां कुछ नया सीख लिया। –
यह एक अच्छा समाधान की तरह दिखता है और ऐसा लगता है कि यह समय बचाएगा। मैं अपनी परियोजना में इसे लागू करने पर एक नज़र डालने जा रहा हूं। धन्यवाद। – shuniar