이것은 잘 착용 된 주제이지만 분명히 이전 게시물을 열람 할 수있는 솔루션을 찾지 못했습니다. 누군가 그것을 바라는 것은 내가 그것을 많이해야하기 때문에 이것을 "올바른 방법"이라고 말할 수 있습니다.Model.State가 유효하지 않은 경우 Ajax.Beginform post validation이 OnSuccess 함수를 트리거합니다.
주요 문제 : Ajax.Beginform이 게시 된 ModelState가 유효하지 않은 경우에도 OnSuccess 메소드가 계속 트리거됩니다. 나는 이것이 올바른 행동이라는 것을 알고 있지만, OnSuccess 방법은 게시물이 "성공"했을 때에 만 의미있는 일을합니다.
이 경우 유효성 검사 오류가있는 재 표시 양식을 가장 효과적으로 관리하는 방법은 무엇입니까? 내 컨트롤러에서 성공 표시 = false를 다시 표시하려면 어떻게해야합니까?
질문과 관련이 없지만 내가 여기서하고있는 일은 내가 포기한 부트 스트랩 모달에 양식을 표시하려고하는 것과 다소 유사합니다.
1) 컨트롤러를 ajax를 통해 호출하여 div에 양식을로드합니다.
$(function addpaneevent() {
$('.addpane').on("click", function() {
var url = '/QuizPane/QuickPane?quizId=' + $(this).data("quizid");
$.ajax({
url: url,
type: 'GET',
contentType: 'application/json',
success: function (result) {
$('#overlay').html(result);
},
error: function (result) {
console.log("bummer",result);
}
});
});
});
2) 성공 나는 테이블에 새 레코드를 추가 및 제거하고 있습니다에 전화 후
[HttpPost]
public ActionResult QuickPane(QuizPane quizpane)
{
if (ModelState.IsValid)
{
db.QuizPanes.Add(quizpane);
db.SaveChanges();
return PartialView("_quizpanelist", quizpane);
}
return View(quizpane); //tried a few different things here
}
4) 제출에 부분도 포함하는 형태
public ActionResult QuickPane(int quizId)
{
var model = *querytogetmodel*
return PartialView("QuickPane",model);
}
@using (Ajax.BeginForm("QuickPane", "QuizPane", FormMethod.Post,
new AjaxOptions
{
InsertionMode = InsertionMode.Replace,
HttpMethod = "POST",
OnSuccess = "updatePaneList(data)",
OnFailure = "massivefail(data)",
}))
{
@Html.ValidationSummary(true)
<fieldset>
@Html.HiddenFor(model => model.QuizID)
<div class="editor-label">
@Html.LabelFor(model => model.Title)
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.Title, new { @autofocus = "autofocus" })
@Html.ValidationMessageFor(model => model.Title)
</div>
...more of the same
<input type="submit" value="Create" class="btn btn-primary"/>
</fieldset>
}
3)을 반환 div 입력 양식을 포함합니다.
, 나는 모든 모델 검증의 장점과 첨부 된 메시지를 손실하지 않습니다 필드 등? 왜 모든 일이 그렇게 힘들어 야합니까? :) – Joel
부분 뷰에 표시 할 유효성 검사를 성공적으로 수행하는 유일한 방법은 전체 뷰로 변경하여 iframe에 표시하는 것입니다. 이 메서드를 사용하여 클라이언트 측 jquery 유효성 검사를 수행하고 수동으로 서버 측 유효성 검사를 수행하고 오류를 통해 결과를 보낼 수 있지만 좀 더 작업 할 수 있습니다. 이것은 나에게도 까다로운 시나리오였습니다. –
실제로 제가 돌아 오는 뷰를하고 있기 때문에 약간 질문을 편집했습니다. View (quizpane); PartialView 대신. UpdateTargetId = "overlay"를 Ajax.BeginForm에 추가하면 ModelState.IsValid == false 일 때 유효성 검사가 올바르게 수행됩니다. 그러나 ModelState.IsValid == true로 설정하면 OnSuccess 메서드를 호출하지 않으므로 실패합니다. 원하지 않는 #overlay에 결과를 삽입합니다. UpdateTargetId = "overlay"를 제거하면 ModelState.IsValid == true 일 때 제대로 작동하지만 Form에 유효성 검사 오류가 없기 때문에 ModelState.IsValid == false 일 때 실패합니다. 지 버스! – Joel