web-dev-qa-db-ja.com

選択した要素の選択したプロパティの値を設定する方法

Webmatrix、razor構文、cshtmlファイルを使用しています。

選択ボックス(id = "selStatus")を含むデータベースレコードの「編集」ページがあります。編集中の現在のレコードの値に基づいて、選択ボックスの「選択された」値を動的に設定しようとしています。

ローカル変数に現在の値またはそのインデックスがありますが、この値を選択に戻すことができないようです。

if (currentStatus=="Completed"){
    selStatus.options[1].selected=true;
}

RES =エラー:名前 'selStatus'は現在のコンテキストに存在しません。

ここで明らかな何かが欠けていますが、それを取得できないようです。どんなアイデアでも大歓迎です。ありがとう

12
rusty coder

Javascriptを使用する以外に、ドロップダウンを作成するときに選択した項目を設定できます。

これは、動的に生成されたドロップダウンがある場合に機能します。ドロップダウンが静的な場合は、javascriptを使用する必要があります。

まず、ドロップダウンを埋めるデータを作成します。

var selectQ = "SELECT StatusName, StatusID FROM MyStatusTable";
List<SelectListItem> statusdropdownlistdata = new List<SelectListItem>();
bool isSelected = false;
foreach(var item in db.Query(selectQ)){
    isSelected = false;
    if(item.StatusName == "Completed"){
        isSelected = true;
    }
    statusdropdownlistdata.Add(new SelectList Item
    {
        Text = item.StatusName,
        Value = item.StatusID.ToString(), 
        Selected = isSelected
    });
}

上記は、ドロップダウンに追加するデータを作成し、条件を満たすアイテムを選択します。特定の基準とロジックで機能するように変更する必要があります。

次に、これをcshtmlのHTML部分に追加します。

@Html.DropDownList("StatusTypes", statusdropdownlistdata)

上記は、ID = "StatusTypes"のドロップダウンリストと、選択したアイテムのドロップダウンデータをレンダリングします。

Html.DropdownListを検索すると、他のオプションやこれを行う方法を見つけることができるでしょう。

  • 私はメモリで書いているので、このコードが機能するかどうかはわかりません
5
dtc

たとえば、婚姻状況のオプションの静的リストがある場合は、次のように(一部の人にとっては)読みやすくすることができます。

<select>
  <option value="Single"   @(marStat == "Single"   ? "selected" : "")>Single</option>
  <option value="Married"  @(marStat == "Married"  ? "selected" : "")>Married</option>
  <option value="Divorced" @(marStat == "Divorced" ? "selected" : "")>Divorced</option>
  <option value="Widowed"  @(marStat == "Widowed"  ? "selected" : "")>Widowed</option>
</select>

これは、データベースから取得した値を含むかみそり変数marStatが条件の文字列と一致する場合、HTMLに「選択済み」と表示されることを意味します。少し「野蛮な」スタイルですが、とても読みやすいと思います。

25
Amarundo

レイアウトサイト:

@{
    if (!IsPost)
    {
        PageData["accountType"] = 0; /* default value */
    }
}
<html>
    <head></head>
    <body>
        <form action="@Href("~/")" method="post">
            <select name="accountType">
                <option value="0"@(PageData["accountType"] == 0 ? " selected" : "")>Standard</option>
                <option value="1"@(PageData["accountType"] == 1 ? " selected" : "")>Golden</option>
                <option value="2"@(PageData["accountType"] == 2 ? " selected" : "")>Ultimate</option>
            </select>
        </form>
    </body>
<html>

他のサイトでは、次のような方法でアクセスできます。

var accountType = Convert.ToInt32(Request["accountType"]);

後であなたのニーズに合わせて設定してください

PageData["accountType"] = (required int value);
5
bviktor

これも追加するのは良いと感じました-それが私がそれをした方法です。コントローラを使用してからViewBagに値を渡し、それを取得して、ビュー内で比較することもできます。以下を参照してください。ここでは、ビューで値をViewBagに渡します-

ViewBag.degreeLevel = userInfo.educationlevel;(ユーザー情報は私のオブジェクトです)

次に、以下のように、ビューで比較を行います。 enter image description here

0
lincolndidon1