ホームページ >バックエンド開発 >C++ >MVC コントローラーでドロップダウンリストの選択された値を取得するにはどうすればよいですか?

MVC コントローラーでドロップダウンリストの選択された値を取得するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-14 11:44:14878ブラウズ

How to Retrieve a DropDownList's Selected Value in an MVC Controller?

MVC コントローラーで選択された DropDownList 値を取得します

このガイドは、MVC コントローラー内の DropDownList から選択された値にアクセスするという一般的な課題に対処します。

問題: MVC コントローラー アクションの DropDownList からユーザーの選択を効率的にキャプチャします。

コントローラーのアクション (初期アプローチ):

次のコードは、FormCollection を使用した最初の試行を示しています。

<code class="language-csharp">[HttpPost]
public ActionResult ShowAllMobileDetails(MobileViewModel MV)
{           
   string strDDLValue = Request.Form["ddlVendor"].ToString(); // Using FormCollection
   return View(MV);
}</code>

モデル:

<code class="language-csharp">public class MobileViewModel 
{
    public List<tbInsertMobile> MobileList;
    public SelectList Vendor { get; set; }
}</code>

ビュー (部分):

<code class="language-html"><table>
    <tr>
        <td>Mobile Manufacturer</td>
        <td>@Html.DropDownList("ddlVendor", Model.Vendor, "Select Manufacturer")</td>
    </tr>
</table></code>

解決策:

方法 1: Request.Form または FormCollection を使用する (あまり推奨されません):

は機能しますが、文字列操作への依存と型安全性の欠如のため、Request.Form への直接アクセスは一般にあまり推奨されません。 上記のコードはすでにこのメソッドを示しています。

方法 2: モデル バインディング (推奨):

このアプローチでは、MVC のモデル バインディング機能を利用して、よりクリーンで保守性の高いソリューションを実現します。

  1. モデルを強化します: 選択したベンダーの値を特に保持するプロパティを MobileViewModel に追加します:
<code class="language-csharp">public class MobileViewModel 
{
    // ... existing properties ...
    public string SelectedVendor { get; set; }
}</code>
  1. ビューを更新します: Html.DropDownListFor を使用して、DropDownList を新しい SelectedVendor プロパティにバインドします:
<code class="language-html">@Html.DropDownListFor(m => m.SelectedVendor, Model.Vendor, "Select Manufacturer")</code>
  1. 洗練されたコントローラー アクション: これで、選択した値が MV.SelectedVendor プロパティに自動的に入力されます:
<code class="language-csharp">[HttpPost]
public ActionResult ShowAllMobileDetails(MobileViewModel MV)
{           
   string strDDLValue = MV.SelectedVendor;
   return View(MV);
}</code>

方法 3: 値とテキストの両方を取得する (上級):

選択した値 とそれに対応するテキスト の両方を取得するには、隠しフィールドと jQuery が必要です。

  1. モデルを拡張します: 選択したベンダーのテキストを保存するプロパティを追加します:
<code class="language-csharp">public class MobileViewModel 
{
    // ... existing properties ...
    public string SelectedVendor { get; set; }
    public string SelectedVendorText { get; set; }
}</code>
  1. jQuery の追加: ビューに jQuery を含めて、DropDownList の選択が変更されるたびに非表示フィールドを更新するためにそれを使用します:
<code class="language-javascript">$(function () {
    $("#SelectedVendor").on("change", function () {
        $("#SelectedVendorText").val($(this).find(":selected").text());
    });
});</code>
  1. 非表示フィールドをビューに追加します:
<code class="language-html">@Html.DropDownListFor(m => m.SelectedVendor, Model.Vendor, "Select Manufacturer")
@Html.HiddenFor(m => m.SelectedVendorText)</code>

これで、MV.SelectedVendor (値) と MV.SelectedVendorText (テキスト) の両方がコントローラーで使用できるようになります。 ビューに jQuery ライブラリを忘れずに含めてください。 これは最も堅牢なソリューションです。

ニーズとコーディング スタイルに最適なソリューションを選択してください。 モデル バインディング (方法 2 および 3) は、その明確さと保守性の点で通常推奨されます。

以上がMVC コントローラーでドロップダウンリストの選択された値を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。