2016-10-18 34 views
0

MVCで作業していますが、私のコントローラからの呼び出し関数に関する質問があります。razorからmvc関数を呼び出す

これは私が呼び出したい関数です。

public ActionResult Index(string continent) 
{ 
    try 
    { 
     return View(db.Factories.ToList()); 
    } 
    catch (Exception e) 
    { 
     string s = e.InnerException.Message; 
    } 

    return View(new FactoriesWController().GetFactoriesOnContinent(continent)); 
} 

私は正確には、cshtmlページからこの関数を呼び出したい、これは、ドロップダウンリストです。

私は、選択された項目変更を使用して、その機能を呼び出し、選択された項目を機能パラメータとして使用したいと考えています。

@Html.DropDownList("Region", new SelectList(new List<string>() {"Europe", "Asia", "North America", "South America", "Africa", "Australia", "World"}), 
        "Select Region",new { @class = "form-control" }) 

<input type="submit" /> 

だから私は、ドロップダウンリストから選択した項目を使用し、パラメータとして選択した項目を使用して関数を呼び出したい:これは、リストのレイザーコードをドロップダウンです。 HTMLでコード化されたことはありません。

+0

そのアクションメソッドからの応答でページをリロードしますか? – Shyju

+0

ドロップダウンリストの名前をパラメータ名「@Html.DropDownList( "continent"、...) 'と一致するように変更し、フォームをFormMethod.Getでラップしてフォームを送信するか、またはajaxを使用して選択したものを投稿しますあなたが同じページにとどまり、DOMを更新したい場合は、メソッドに値を渡してください。 –

+0

@Shyjuそうですね。 –

答えて

3

formタグの中にフォーム要素(SELECTとサブミット)を入れます。フォームのaction属性は、アクションメソッド名を指す必要があります。 SELECT要素の名前属性の名前を、アクションメソッドのパラメータ名と一致する名前に変更します。

Html.BeginFormを使用すると、フォームタグを生成できます。あなたのIndexアクションメソッドを想定し

@using (Html.BeginForm("Index", "home")) 
{ 
    @Html.DropDownList("continent", 
     new SelectList(new List<string>() 
     {"Europe", "Asia", "North America", "South America", "Africa", "Australia", "World"}), 
     "Select Region", 
     new {@class = "form-control"}) 

    <input type="submit"/> 
} 

HomeControllerの内側にあります。

ユーザーがSELECT要素からオプションを選択して送信をクリックすると、選択肢がインデックスアクションメソッドに送信され、選択されたオプションがcontinentパラメータで使用可能になります。

+0

'Html.BeginForm(" Index "、" Home " 、FormMethod.Get) ' –

+0

投稿も機能するはずです(アクションメソッドがGETアクションであっても)。 Getを指定する理由 – Shyju

+0

OPは '[HttpPost]'を持っていなかったので、GET –

関連する問題