2016-04-12 13 views
-1

Görünümdeki giriş modeli alanlarının altında gösterilecek Doğrulama hata iletilerini alamıyorum.Doğrulama tetikleniyor, ancak hata durumunda mesaj gösterilmiyor. Neyi kaçırıyorum? MVC 5 Razor

Yukarıdaki [Required] etiketinin Açıklama girişi, ModelState Invalid'i geçersiz kılar, ancak gönderimi durdurmaz. Model Devleti kontrol ederek onu yakalamak zorundayım. Bazı .js dosyalarını özlüyor muyum? Bunu ikiye katlamak için hiçbir örnek yok.

İşte benim modelidir (Şimdilik yalnızca bir [Gerekli] var dikkat edin):

public partial class Requests 
{ 
    public int RequestID { get; set; } 
    public string NickName { get; set; } 
    public Nullable<double> Lat { get; set; } 
    public Nullable<double> Lng { get; set; } 
    public string ZipCode { get; set; } 
    [Required(ErrorMessage = "Description of what you need is missing.")] 
    public string Description { get; set; } 
    public System.DateTime DateCreated { get; set; } 
} 

İşte Açıklama girdi girişi ihtiyacı benim Görünüm olduğunu.

<div class="form-group"> 
    @Html.LabelFor(model => model.Description, htmlAttributes: new { @class = "control-label col-md-2" }) 
    <div class="col-md-10"> 
     @Html.TextAreaFor(model => model.Description, new { htmlAttributes = new { @class = "form-control", @rows = "20", @cols = "200" } }) 
     @Html.ValidationMessageFor(model => model.Description, "", new { @class = "text-danger" }) 
    </div> 
</div> 

İşte benim denetleyicisi ActionResult olan kullanıcı doğru Görünüm yönlendirilir ve TempData şey kaydedildiği göstermektedir ModelState Başarısızlık halinde

if (ModelState.IsValid) 
{ 
//THIS ALL WORKS IF Description HAS INPUT 

} 
else 
{ 
    TempData["Saved"] = "Nothing saved yet. Look for reason."; 
return RedirectToAction("StoreRequests", new { lat = requests.Lat, lng = requests.Lng }); 
} 

(aşağı skinnied). Bununla birlikte, görünümün üst kısmında, Hatalı girişin altındaki Görünümde ValidationSummary no'lu hata mesajında ​​bir hata mesajı yoktur ve giriş hatası gönderimi durdurulmaz. istemci tarafı doğrulama almak (ve dolayısıyla form, geçersiz ise sunulmadan önlemek) amacıyla

@if(TempData["Saved"] != null) 
{ 
    <span style="color: red;">@TempData["Saved"].ToString()</span> 
} 
<hr /> 
@Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
+0

Teşekkür ederim Stephen. Bunları ekledim ve işe yaradı. Muhtemelen _Layout.cshtml içinde bir çift daha vardı. Eğer bir cevap vermek istiyorsanız bunu kabul edeceğim. – JustJohn

+0

Neden oy kullanmadığımı bilmiyorum. oh iyi – JustJohn

cevap

1

, size (ya düzen) görünümünde aşağıdaki komut dosyalarını eklemeniz gerekir.

jquery-{version}.js 
jquery.validate.js 
jquer.validate.unobtrusive.js 

Eğer yeni bir proje oluştururken VS tarafından kurulan varsayılan demetleri varsa, basitçe görünümünde ek olarak

@Scripts.Render("~/bundles/jquery") 
@Scripts.Render("~/bundles/jqueryval") 

için aşağıdaki ekleyebilir, ModelState eğer yönlendirme olmamalıdır geçersizdir, ancak kullanıcı javascript'i devre dışı bırakmış olsa bile herhangi bir doğrulama hatasını görüntüleyen geçerli görünümü döndürür. Yönlendirerek, ModelState kaybetme akımınız, böylece yönlendirme yaptığınız görünümde hiçbir doğrulama hatası görüntülenmeyecektir, daha önce kullanıcı tarafından doldurulmuş olan herhangi bir verinin (geçirdiğiniz 2 parametre hariç) kaybolacağı anlamına gelmez.

public ActionResult Edit (Requests model) 
{ 
    if (!ModelState.IsValid) 
    { 
     return View(model); 
    } 
    // save you data and redirect 
} 
+0

Hayır. Zamanını asla harcamak istemiyorum Stephen. Benim için çok şey çözdün. Üzgünüm çok uzun sürdü. Beni bilgisayardan uzak tutan başka şeyler vardı. – JustJohn

+0

ModelState On Geçersiz Geçersiz bir önceki görünüme dönüyorum ancak aynı zamanda TempData'da bir hata iletisi gönderiyorum ve Google Haritalar'ı tekrar doldurmak için aynı Lat/Lngs göndermesini sağlıyorum. Belki daha berbat bir yol var ama benim bir milyon yıl içinde yolumun kırılacağından şüpheliyim. – JustJohn

+0

@JustJohn, Bunun için 'TempData' kullanmamalısınız. Sadece bir 'ModelState' hatası ekleyin ve görünümü döndürün. 'ModelState.AddModelError ("", "Henüz kayıtlı bir şey yok. Nedeni arayın."); View (model) 'i döndür ve '@ Html.ValidationSummary()' da görüntülenecektir. Ama bunun anlamı şudur: 'ModelState' geçersiz ve görünümü döndürdüğünüzde, tüm hata iletileri zaten @ @ Html.ValidationFor (m => m.yourProperty) 'de görüntülenir. Hiçbir koşulda, "ModelState" geçersizse yönlendirilmemelisiniz. –

0

sizin .cshtml dosyasında doğrudan aşağıdaki gerekli scripts ekleyin.

<script src="/Scripts/jquery.unobtrusive-ajax.js"></script> 
<script src="/Scripts/jquery.validate.js"></script> 
<script src="/Scripts/jquery.validate.unobtrusive.js"></script>