2017-10-05 4 views
4

私は奇妙なケースがあり、あなたの啓発が欲しかった。 私は2つのコントローラを持っています。一般的なPerson使用のアクション・メソッドのための1人のコントローラと、候補に関連するより具体的なアクション・メソッドのための1つの候補コントローラ。 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メソッドが見つかりません。私のアクションをPerson Controllerの中に入れたら、正しく動作します。しかし、私はなぜそのようなのだろうと思っていた。私はいくつかの掘り出し物をしましたが、私はそれについての答えを得ることはできませんでした。 ?// {プロジェクト名} /人/ SaveCandidateLanguage長= 9

代わり

ののhttp:放火犯から

私はブラウザが投稿しようとするURLが何らかの理由

HTTPのためであることがわかり:// {ProjectName} /候補/ SaveCandidateLanguage?Length = 9

自然に私は404 Not foundという応答を得ました。私はまた、変数は何ですか?私はURLの最後に表示される長さ= 9、それはどこから来るのだろうかと思っていた。

答えて

6

Ajax.BeginFormには11種類の宣言があります。 object routeValuesパラメータに文字列を入れしようとしている、あなたはこの1つを使用し

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つの文字と長さが含まれているため?length="9"理由は、文字列

+2

の唯一の財産であり、「候補」は9つの文字が含まれているため、 '?長=「9」の理由は' 'length'は' string'の唯一のプロパティです –

+0

答えをありがとう!今それは理にかなっています。 :)私は2番目の方法を見たものからちょうど1つはおそらくAjax.BeginForm(string actionName、文字列コントローラ、オブジェクトrouteValues、AjaxOptionsオプション、オブジェクトhtmlAttributes)ですか?答えの明確化のために。ありがとうございました。 –

関連する問題