2017-12-13 33 views
1

の目標は、特定の選択値(<option>事前に選択して<select>ドロップダウンを生成するので、確定HTMLは次のようになります。2の値を持つオプションがあることを.NETコア<select>既定値を使用していますか?

<select> 
    <option value = "1">Option1</option> 
    <option value = "2" selected>Option2</option> 
    <option value = "3">Option3</option> 
</select> 

注意selected属性は、ドロップダウンがクリックされる前に表示されることを示します。私は.NET Core Tagヘルパーを使用してこれを達成することはできません。そこFormオブジェクトはそれにIdName性質を持っていることを

public class ReportViewModel 
{ 
    [Display(Name = "Pick a form")] 
    public IEnumerable<Form> AvailableForms { get; set; } 

    public Form SelectedForm { get; set; } 

    public List<ReportData> FormResponses { get; set; } 
} 

注:

この

は私のモデル(私はあなたが安全に細部を無視することができると思います)です。

これは私のselect文です:

<label asp-for="SelectedForm.Name" class="form-control-label font-weight-bold"></label> 
<select asp-for="SelectedForm.Name" 
     class="form-control" 
     onchange ="onFormSelected(this.value)" 
     asp-items="@(new SelectList(Model.AvailableForms, "Id", "Name"))"> 
</select> 

私は基本的にあなたがSelectedForm.Idプロパティを使用するように選択を設定されている必要がありMicrosoft Guide またはblog on the topic

+0

これはデフォルトの「空」状態ですか、選択した値(既に選択されているユーザー設定など)を表示しようとしていますか? – James

+0

@Jamesユーザーは別のページでフォームを選択します。上記のページ(マークアップ付き)がロードされます。彼らが望むなら、彼らはレポートのために別のフォームを選ぶことができるようになっています。つまり、ビューが読み込まれる前に、コントローラに「デフォルト」フォームのIDがあります。 – VSO

+0

'asp-for'値は、最初に選択された値を決定します。 – CalC

答えて

1

に答えが表示されません、コントローラーで選択するフォームの値を指定します。私はあなたのコードを少し更新しなければならなかったが、これは私の作品 - 追加の引数、つまりselectedValueを取ることができ、あなたのコントローラ

var vm = new ReportViewModel() 
{ 
    AvailableForms = new List<Form>() 
}; 

var form2 = new Form() { Id = 2, Name = "Bar" }; 
(vm.AvailableForms as List<Form>).Add(new Form() { Id = 1, Name = "Foo" }); 
(vm.AvailableForms as List<Form>).Add(form2); 
(vm.AvailableForms as List<Form>).Add(new Form() { Id = 3, Name = "Baz" }); 

vm.SelectedForm = form2; 

return View(vm); 
+0

これはうまくいきました、ありがとう! – VSO

1

SelectListコンストラクタに続いて

<label asp-for="SelectedForm" class="form-control-label font-weight-bold"></label> 
<select asp-for="SelectedForm.Id" 
     class="form-control" 
     onchange ="onFormSelected(this.value)" 
     asp-items="@(new SelectList(Model.AvailableForms, "Id", "Name"))"> 
</select> 

を。私は asp-forがあなたのために働いていない理由は SelectedForm.Nameの値との間に不一致だと思う

asp-items="@(new SelectList(Model.AvailableForms, "Id", "Name", Model.SelectedForm.Id))" 

:あなたのケースでは、あなたは私がはこのようになります考えてれ、を介してこれを渡すことができるはずです(これは文字列です)、およびSelectListコンストラクタで使用しているIdプロパティの値です(これは整数ですか?)。

ソースコードでは、これがどのように機能するかを部分的に見ることができます。あなたはGenerateOptionhereを終わる:

var selected = item.Selected; 
if (currentValues != null) 
{ 
    var value = item.Value ?? item.Text; 
    selected = currentValues.Contains(value); 
} 

この時点で、私はcurrentValuesは、文字列(Form.Name)になります単一の要素を含むと考えています。 item.Valueは、 "1"と一致しません。