누군가 도움이된다면 고맙겠습니다.폼 제출 결과에 따라 Ajax.BeginForm()의 UpdateTargetId를 동적으로 변경하십시오.
나는 사용자 유형에 따라 서로 다른 부분 뷰를 반환 할 :
[HttpPost]
public ActionResult Edit(ContractModel model)
{
if(ModelState.IsValid)
{
if (curUser.IsInputer) { .... return View("Contracts");}
else if(curUser.IsAuthorizer) { ..... return View("Details");}
}
return PartialView(model);
}
보기 : ModetState.IsValid
= false
내 기능 returnViewOnFailure
이 발사되지 않은 경우
@{
string updateRegion = "";
if (curUser.IsInputer)
{
updateRegion = "content";
}
else if (curUser.IsAuthorizer)
{
updateRegion = "mainPane";
}
}
<script>
function returnViewOnFailure(result) { //not firing on submission failure
$("#mainPane").html(result);
}
</script>
@using (Ajax.BeginForm("Edit", new AjaxOptions() { UpdateTargetId = updateRegion,
InsertionMode = InsertionMode.Replace,
OnFailure = "returnViewOnFailure" }))
{.........}
문제가 있습니다. 양식 제출이 실패한 경우 (사용자 유형에 관계없이) UpdateTargetId
은 "mainPane"
, 그렇지 않은 경우 curUser
에 의존해야합니다.
편집 :
그래서,이 양식을 작성하는 아약스 호출을 사용하고 조언과 같이 유효성 검사가 서버 측 완료
<script>
var form = $('#contract_form');
form.submit(function (ev) {
$.ajax({
cache: false,
async: true,
type: "POST",
url: form.attr('action'),
data: form.serialize(),
success: function (data) {
$("#content").html(data);
//How to check ModelState.IsValid and show errors?
}
});
ev.preventDefault();
});
'Ajax.BeginForm'은 뷰가 처음로드 될 때 서버에서 평가되어, 메소드가 반환하는 것과 상관없이 항상 동일한 'targetID'를 사용하게됩니다. 둘째, 'OnFailure'가 결코 부딪 치지 않도록 오류를 던지지 말라. –
Ajax.BeginForm 메소드에 의해 생성 된 html을보십시오. targetId는 "data-ajax-update"속성에 있습니다. 양식을 제출할 때 속성의 값을 변경하는 일부 Java 스크립트를 구현하십시오. – Tobias
페이지로드 및 $ ("# mainPane"). html (content)의 유효성을 확인하기 위해 ViewContext.ViewData.ModelState를 검사하면 어떻게되지만 콘텐츠를 어떻게 얻을 수 있습니까? –