2017-10-05 49 views
4

我有一個奇怪的案例,我想要你的啓示。 我有兩個控制器。用於一般人員的一個人控制器使用動作方法,並且一個候選人控制器用於與候選人相關的更具體的動作方法。 我使用位於Person文件夾下的一個局部視圖,以便在將來使用它作爲其他類型的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 
} 

由於某種原因,這種方式找不到Action方法。如果我把我的行動放在人員控制器中,它會再次正常工作。然而我想知道爲什麼是這種情況。我做了一些挖掘,但我沒有設法得到答案。

從螢火我看到瀏覽器嘗試文章的網址是出於某種原因HTTP

:// {}項目名/人/ SaveCandidateLanguage長度

= 9

而不是http :// {ProjectName}/Candidate/SaveCandidateLanguage?Length = 9

自然我得到了一個404找不到響應。我也想知道什麼是變量?長度= 9,我看到在網址的結尾,它從哪裏來。

回答

6

Ajax.BeginForm有11個不同的聲明。 在你的第一種情況下,它的工作原理是因爲你使用這一個:你用這個

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

但第二種情況下,試圖把一個字符串中的object routeValues參數:

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

最後,您要使用的聲明是:

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

null價值實現,如:

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

併爲?length="9"的原因是因爲「候選人」包括9個字符,長度字符串

+2

的唯一屬性和'什麼原因呢?長度=「9」'是因爲「候選人」包括9個字符和'長度'是'string'的唯一屬性。 –

+0

謝謝你的回答!現在它是有道理的。 :)從我看到的第二種方法只是一件事可能是Ajax.BeginForm(字符串actionName,字符串控制器,對象routeValues,AjaxOptions選項,對象htmlAttributes)對嗎?爲了澄清答案。再次感謝你。 –

相關問題