簡體   English   中英

ASP.NET部分視圖驗證失敗

[英]ASP.NET partial view validation fails

我在驗證我的局部視圖時遇到問題。 我的索引視圖由幾個局部視圖組成。 正在使用其中一種視圖_Contact,以便用戶可以提交即將發生的事件。 我想啟用檢查,是否有人已經使用輸入的電子郵件提交了活動。 一切正常,但問題是它不顯示有關提交失敗的消息(它在服務器端通過驗證失敗,但不會向用戶顯示錯誤)。 這是我的代碼:

 Index:
...
 @if(ViewBag.Competitor==null)
{@Html.Partial("_Contact", new CompetitorViewModel())}else
                          {
@Html.Partial("_Contact",(CompetitorViewModel)ViewBag.Competitor)
}
...

 _Contact:
 @model Models.CompetitorViewModel

 <script src="@Url.Content("~/Scripts/jquery.js")"></script>
 <script src="@Url.Content("~/Scripts/jquery.validate.min.js")"></script>
 <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")">     </script>


<section id="contact">
    <div id="contact-us" class="parallax">
        <div class="container">
            <div class="row">
                <div class="heading text-center col-sm-8 col-sm-offset-2 wow fadeInUp" data-wow-duration="1000ms" data-wow-delay="300ms">


                </div>
            </div>
            <div class="contact-form wow fadeIn" data-wow-duration="1000ms" data-wow-delay="600ms">
                <div class="row">
                    <div class="col-sm-6">
                        @using (Html.BeginForm("SubmitStudent", "Home", FormMethod.Post, new { id = "main-contact-form" }))
                        {
                            @Html.ValidationSummary(true)
                            <div class="row  wow fadeInUp" data-wow-duration="1000ms" data-wow-delay="300ms">
                                <div class="col-sm-6">
                                    <div class="form-group"> 
                                         @Html.TextBoxFor(model=>model.firstName, new { @class = "form-control", @placeholder="Ime"})
                                         @Html.ValidationMessageFor(model=>model.firstName)
                                   </div>
                                </div> 
                                <div class="col-sm-6">
                                    <div class="form-group">
                                        @Html.TextBoxFor(model=>model.lastName, new { @class = "form-control", @placeholder="Prezime"})
                                         @Html.ValidationMessageFor(model=>model.lastName)
                                    </div>
                                </div>
                            </div>
                            <div class="form-group">
                                 @Html.TextBoxFor(model=>model.eMail, new { @class = "form-control", @placeholder="Email Adresa"})
                                 @Html.ValidationMessageFor(model=>model.eMail)   
                            </div>
                            <div class="form-group">
                                 @Html.DropDownListFor(m=> m.collegeId, (IEnumerable<SelectListItem>)ViewBag.Colleges)   
                            </div>


                            <div class="form-group">

                                 <input type="submit" value="Prijavi me" class="btn-submit" />
                            </div>

                        }
                    </div>
                    <div class="col-sm-6">
                        <div class="contact-info wow fadeInUp" data-wow-duration="1000ms" data-wow-delay="300ms">
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</section><!--/#contact-->

main.js:

 var form = $('#main-contact-form');
 form.submit(function(event){
    event.preventDefault();
    var form_status = $('<div class="form_status"></div>');
    $.ajax({
        type:"POST",
        url: '/Home/SubmitStudent',
        data: $('#main-contact-form').serializeArray(),
    cache: false,
        beforeSend: function(){
            form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Your request is being sent...</p>').fadeIn() );
        }
}).
    success(function(data){


        form_status.html('<p class="text-success">Thank you for submitting to this event</p>').delay(3000).fadeOut();
    }).
        complete(function ()
    {
            $("#main-contact-form").each(function () { $.data($(this)[0], 'validator', false); });
            $.validator.unobtrusive.parse("#main-contact-form");
    })

});

家庭控制器:

    [HttpPost]
    public ActionResult SubmitStudent(CompetitorViewModel c)
    {
        var colleges = _db.colleges.Distinct().ToList();
        ViewBag.Colleges = new SelectList(colleges, "id", "Name"); 

             if (!ModelState.IsValid)
        {
            ViewBag.Competitor = c;

        }
        else
        {
            var competitors = _db.competitors;


            foreach (Competitor c1 in competitors)
            {
                if (c1.eMail == c.eMail)
                     {
                         ModelState.AddModelError("c.eMail", "That E-mail is already registered to this event.");
                         ViewBag.Competitor = c;
                         return View("Index");
                     }
            }


            DCCollege college = (DCCollege)_db.colleges.Find(c.collegeId);
            Competitor competitor = new Competitor();
            competitor.firstName = c.firstName;
            competitor.lastName = c.lastName;
            competitor.eMail = c.eMail;
            competitor.college = college;

            competitors.Add(competitor);
            _db.Save();
        }

        return View("Index");
    }

如果有人可以幫助我,我將不勝感激。 我為此苦了很長時間。

我迅速瀏覽了一下代碼。 我認為您看不到驗證消息,因為您將其添加到了ModelState,但是沒有將模型傳遞給視圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM