У меня проблемы с проверкой частичного представления. Мой указатель просматривается несколькими частичными представлениями. Один из этих просмотров, _Contact, используется для того, чтобы пользователи могли подчиняться предстоящему событию. Я хочу включить проверку, если кто-то уже отправил событие с введенным электронным письмом. Все работает отлично, но проблема в том, что он не показывает сообщение о неудачной подаче (он не выполняет проверку на стороне сервера, но не показывает ошибку пользователю). Вот мой код:Ошибка частичного просмотра ASP.NET
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");
})
});
HomeController:
[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");
}
Я был бы очень признателен, если кто-то может мне помочь. Я борюсь с этим довольно долгое время.
Я передаю модель для просмотра. Я положил его в ViewBag и в Index view я передал его частичному _Contact в качестве модели. Я также попытался вернуть частичный вид непосредственно с контроллера, тоже не работал. – alminh
Да, но ModelState не связан с ViewBag.You переходит к «Index» ModelState, но «Контакты» получает только модель от ViewBag. Извините, я не знаю, как передать ModelsState в PartialView, возможно, это возможно, но я так не думаю. Самое простое решение для вас - добавьте сообщение об ошибке в ViewBag и покажите его вручную (
@ ViewBag.ErrorMessage
). Но это действительно плохо. Я предлагаю вам подумать об изменении логики, архитектуры. Например, вы можете проверить электронную почту, используя другой небольшой запрос на сервер, HTTP GET. – anastasiya