Entity Framework 4.1 ile bir ASP.Net MVC 3 Web uygulaması geliştiriyorum ve form doğrulama için Veri Ek Açıklamalarını kullanma konusunda biraz kafa karıştırıyorum. Her zaman bir ViewModel'i gerçek nesnenin geçirilmesinin aksine bir Görünüm'e döndürüyorum. Örneğin:ASP.Net MVC 3 ViewModel Veri Açıklaması
public class ViewModelTeam
{
public Team Team { get; set; }
}
Benim Görünüm sonra bu Görünümü doğrulamak için bu
@model UI.ViewModels.ViewModelTeam
@Html.HiddenFor(model => model.Team.teamID)
<div class="editor-label">
@Html.LabelFor(model => model.Team.description)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Team.description)
@Html.ValidationMessageFor(model => model.Team.description)
</div>
gibi bir şey olabilir, ben o zaman
[MetadataType(typeof(TeamMetaData))]
public partial class Team
{
public class TeamMetaData
{
[DisplayName("Team Name")]
[Required(ErrorMessage = "Please enter a Team Name")]
public object description { get; set; }
Ve benzeri kısmi sınıfta Veri Ek Açıklamalar yarattık Oluşturma Denetleyicim'de bu
[HttpPost]
public ActionResult Create(Team team)
{
if (ModelState.IsValid)
{
//Add team and redirect
}
//Got this far then errors have happened
//Add Model State Errors
ViewModelTeam viewModel = new ViewModelTeam
{
Team = team
};
return View(viewModel);
}
Şimdi, bu iyi çalışıyor, ancak ViewModels ve doğrulama hakkında daha fazla okudum, doğrulanması gereken ViewModel olduğu görünüyor, çünkü günün sonunda, görüntüleniyor ViewModel olduğunu Görünüm, nesne değil.
Bu nedenle, aşağıdaki
public class ViewModelListItem
{
public int teamID { get; set; }
[DisplayName("Item Name")]
[Required(ErrorMessage = "Please enter a Team Name")]
public string description { get; set; }
gibi görünmek benim ViewModel değişti Ve ayrıca Yine bu
[HttpPost]
public ActionResult Create(Team team)
{
if (ModelState.IsValid)
{
//Add team and redirect
}
//Got this far then errors have happened
//Add Model State Errors
ViewModelTeam viewModel = new ViewModelTeam();
viewModel.description = team.description;
return View(viewModel);
}
benim oluşturmak Kontrolörü değişti, bu işleri, ama sadece duygu olsun 2. yöntem, bunu yapmanın ilk yolunda biraz dağınık veya verimli değil.
Bu konuda başkalarının düşüncelerini duymak isterim. Yardımlarınız için teşekkür ederim ve bu kadar uzun bir yazı için özür dilerim.
Ya ViewModel başarısız oluşturursanız oluşturun Kontrolör içinde 30 özelliklerini söylemek vardı bir nesne temsil eğer, Sonra her özelliği tekrar ViewModel'e atamak zorunda kalırdım, yani viewModel.property1 = team.prop1, viewModel.property2 = team.prop2, viewModel.property3 = team.prop3 ... viewModel.property30 = team.prop30 vb. Bu verimsiz görünüyor, ama AutoMapper'ın yaptığı şey nedir? Daha önce hiç kullanmadım. – tgriffiths
Bu, bir sürü anlam ifade ediyor. Mükemmel cevap. Teşekkür ederim. – tgriffiths
Paylaşım için teşekkürler Darin Dimitrov. Sadece bir soru, sen sadece ViewModel üzerinde DataAnnoration kullanıyorsun ve asla Modelde değilsin? Bu http://forums.asp.net/t/1502378.aspx – GibboK