Если модель недопустима, вернитесь к частичному представлению внутри представления с сообщением об ошибке
в моем asp.net проект MVC 4, Мне нравится защищать что-то от частичного просмотра, когда пользователь нажимает "подробнее". Сохранение данных не проблема, закрытие частичного представления не проблема, открыть частичное представление не проблема, это когда моя модель недействительна (когда пользователь забывает что-то отметить) В результате возвращается мое частичное представление, но не внутри представления, где оно должно быть. Его просто рассматривают как автономный страница.
вид:
@model Evaluatietool.ViewModels.EvaluatorWijzigenOPViewModel
<h3>@ViewBag.Message</h3>
@using (Html.BeginForm("ChangeEvaluator", "Ontwikkelplan"))
{
@Html.ValidationSummary(true)
@Html.HiddenFor(model => model.oldEvalAccount)
@Html.HiddenFor(model => model.selectedMedewerkerAccount)
@Html.HiddenFor(model => model.eval);
@Html.HiddenFor(model => model.countMedewerkers);
...
...
<div class="Buttons">
<input type="submit" value="Submit" />
@Ajax.ActionLink("Sluiten", "Evaluatorenlijst", new AjaxOptions { OnSuccess = "HideResultDiv" })
</div>
}
:
[HttpPost]
public ActionResult ChangeEvaluator(EvaluatorWijzigenOPViewModel ewopvm)
{
if (ModelState.IsValid)
{
if (ewopvm.selectedObjects != null)
{
ewopvm.selectedObjects.Add(ewopvm.selectedMedewerkerAccount);
}
else
{
ewopvm.selectedObjects = new List<string>();
ewopvm.selectedObjects.Add(ewopvm.selectedMedewerkerAccount);
}
Ontwikkelplannen op = new Ontwikkelplannen();
Evaluaties e = new Evaluaties();
foreach (string s in ewopvm.selectedObjects)
{
op.ChangeEvaluator(ewopvm.newEvalAccount, ewopvm.oldEvalAccount, s, ewopvm.eval);
}
return RedirectToAction("Evaluatorenlijst");
}
return PartialView("EvaluatorWijzigenPartial", ewopvm);
}
ссылка, которая вызывает частичное представление
@Ajax.ActionLink(item.Evaluator1.Naam, "EvaluatorWijzigenPartial", new { id = item.ID, eval = true }, new AjaxOptions { UpdateTargetId = "EvaluatorWijzigen", OnComplete = "ShowResultDiv"})
1 ответов
от того, что я вижу, вы используете стандартный Html.BeginForm
проводки ChangeEvaluator
действие контроллера, которое либо выполняет перенаправление, либо возвращает частичное представление в случае сбоя проверки.
таким образом, поведение, которое вы наблюдаете, совершенно нормально. Вам нужно будет отправить эту форму с помощью AJAX, если вы хотите этого достичь:
@using (Ajax.BeginForm("ChangeEvaluator", "Ontwikkelplan", new AjaxOptions { OnSuccess = "handleSuccess" }))
{
...
}
и затем вы можете адаптировать действие контроллера, чтобы в случае успеха он не перенаправлял, но возвращал объект Json, содержащий url для перенаправления на:
[HttpPost]
public ActionResult ChangeEvaluator(EvaluatorWijzigenOPViewModel ewopvm)
{
if (ModelState.IsValid)
{
...
return Json(new { redirectTo = Url.Action("Evaluatorenlijst") });
}
return PartialView("EvaluatorWijzigenPartial", ewopvm);
}
и, наконец, написать handleSuccess
функция javascript:
function handleSuccess(result) {
if (result.redirectTo) {
// The controller action returned a JSON object with the redirectTo property
// let's redirect to this location:
window.location.href = result.redirectTo;
} else {
// The controller action returned a partial view with the form and the errors
// So we need to update some containing DIV with it:
$('#someDivThatCOntainsYourForm').html(result);
}
}