Sorun kullanıcının düzenleyebileceği alanların bir listesi varnasıl bir liste
bir öğenin bir ModelState anahtarı almak için. Model gönderildiğinde, bu öğelerin geçerli olup olmadığını kontrol etmek istiyorum. Veri notasyonlarını kullanamıyorum çünkü her alanın çalışma zamanına kadar bilmeyeceğim farklı bir doğrulama süreci vardır. Doğrulama başarısız olursa, ModelState.AddModelError(string key, string error)
numarasını kullanıyorum. Burada anahtar, hata iletisini eklemek istediğiniz html öğesinin adıdır. Bir alan listesi olduğundan, Razor'un html öğesi için ürettiği ad Fields[0].DisplayName
gibidir. Sorum şu: görünüm modelinden oluşturulan html adının anahtarını almak için bir yöntem mi var?
Çözüm teşebbüs
hiçbir şans ile anahtar için toString()
yöntemi denedik. Ayrıca HtmlHelper
sınıfını inceledim ama yararlı bir yöntem görmedim.
Kod Parçacığı
Görünüm Modeli
public class CreateFieldsModel
{
public TemplateCreateFieldsModel()
{
FreeFields = new List<FieldModel>();
}
[HiddenInput(DisplayValue=false)]
public int ID { get; set; }
public IList<TemplateFieldModel> FreeFields { get; set; }
public class TemplateFieldModel
{
[Display(Name="Dispay Name")]
public string DisplayName { get; set; }
[Required]
[Display(Name="Field")]
public int FieldTypeID { get; set; }
}
}
Kontrolör
public ActionResult CreateFields(CreateFieldsModel model)
{
if (!ModelState.IsValid)
{
//Where do I get the key from the view model?
ModelState.AddModelError(model.FreeFields[0], "Test Error");
return View(model);
}
}
Bu iyi bir şey ama bu mantığı güzel bir uzantı yöntemiyle tamamlayan başka bir yazı bulduk: http://stackoverflow.com/a/12689563/1825109 – Michael12345