2017-10-05 3 views
4

나는 이상한 경우가있어서 나는 당신의 깨달음을 원했다. 컨트롤러가 두 개 있습니다. 일반적인 사람 사용을위한 한 사람 컨트롤러는 후보자와 관련된 구체적인 행동 방법을 위해 행동 방법과 한 후보 컨트롤러를 사용합니다. 다른 Person 유형에 대해 나중에 사용하려는 경우 generic으로 사용하기 위해 Person 폴더 아래에있는 부분 뷰 하나를 사용합니다. 당분간이 부분 뷰는 후보 컨트롤러를 대상으로하는 Ajax.BeginForm을 사용합니다. 내가 사용하는 구문은액션 인수를 찾지 못하는 4 개의 인자를 가진 Ajax.BeginForm

@using (Ajax.BeginForm("SaveCandidateLanguage", "Candidate", 
    new AjaxOptions 
    { 
     HttpMethod = "Post", 
     OnBegin = "onBeginFormValidation", 
     OnSuccess = "onSaveCandidateLanguageSuccess" 
    })) 
{ 
    // form input elements 
} 

이 Ajax.BeginForm의이 유형은 다른 컨트롤러에서 작업을 대상으로한다는 사실에도 불구하고 제대로 작동합니다. 이제 폼 유효성 검사를 위해 Ajax.BeginForm에 인수를 더 추가해야했습니다. 내 새 구문은 다음과 같습니다.

@using (Ajax.BeginForm("SaveCandidateLanguage", "Candidate", 
    new AjaxOptions 
    { 
     HttpMethod = "Post", 
     OnBegin = "onBeginFormValidation", 
     OnSuccess = "onSaveCandidateLanguageSuccess" 
    }, 
    new 
    { 
     id = "addEditCandidateLanguageForm", 
     novalidate = "novalidate" 
    })) 
{ 
    // form input elements 
} 

이 방법으로는 작업 방법을 찾을 수 없습니다. Person Controller 안에 조치를 취하면 다시 올바르게 작동합니다. 그러나 나는 왜 그런지 궁금해했다. 나는 약간 파기를했다. 그러나 나는 그럭저럭 그것에 관해 대답을 얻을 수 없었다. // {프로젝트 이름}/사람/SaveCandidateLanguage 길이 = 9

대신

의 HTTP : 불을 지르고에서

나는 브라우저가 게시하려고 URL이 어떤 이유로

HTTP에 대한 것을 볼 : // {ProjectName}/후보자/SaveCandidateLanguage? Length = 9

자연스럽게 404 Not found 응답이 표시됩니다. 나는 또한 변수의 길이가 궁금 해서요? 길이 = 9는 URL의 끝에서 보았습니다.

답변

6

Ajax.BeginForm에는 11 가지의 다른 선언이 있습니다. object routeValues 매개 변수에 문자열을 넣어 노력하고, 당신이 하나를 사용

Ajax.BeginForm(string actionName, string controllerName, AjaxOptions options) 

그러나 두 번째 경우 : 당신이 하나를 사용하기 때문에 첫 번째 경우 , 그것은 작동

Ajax.BeginForm(string actionName, object routeValues, AjaxOptions options, object htmlAttributes) 

마지막으로, 사용할 선언은 다음과 같습니다처럼 null 값으로 구현

Ajax.BeginForm(string actionName, string controllerName, object routeValues, AjaxOptions ajaxOptions, object htmlAttributes) 

:

Ajax.BeginForm("SaveCandidateLanguage", "Candidate", null, 
new AjaxOptions 
{ 
    HttpMethod = "Post", 
    OnBegin = "onBeginFormValidation", 
    OnSuccess = "onSaveCandidateLanguageSuccess" 
}, 
new 
{ 
    id = "addEditCandidateLanguageForm", 
    novalidate = "novalidate" 
})) 

그리고 "후보는"9 문자가 포함 길이 문자열

+2

의 전용 속성 그리고'에 대한 이유 때문에 ?length="9"에 대한 이유는가? 길이 = "9"' "후보는"9 문자가 포함되어 있기 때문에 'length'는'string'의 유일한 속성입니다. –

+0

해답을 가져 주셔서 감사합니다! 이제는 의미가 있습니다. :) 내가 두 번째 방법을 보았던 것에서 아마 한 가지는 아마 Ajax.BeginForm (문자열 actionName, 문자열 컨트롤러, 객체 routeValues, AjaxOptions 옵션, 객체 htmlAttributes)일까요? 답을 명확히하기 위해서. 다시 감사합니다. –

관련 문제