ロードされているモデルから選択されたオプションを持つシンプルな選択があります。ここで起動するにはc#MVC 6 dotnet core select選択されていないオプションが選択されていない
は私の単純なモデル
public class invoice
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public invoice_state invoice_state { get; set; }
}
public class invoice_state
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public string alias { get; set; }
public List<invoice> invoices { get; set; }
[Display(Name = "title")]
public string title { get; set; }
}
ここで1つのビューで動作する私が持っているものです。コントローラで
:ビューで
public IActionResult Create()
{
string state = "start_finish";
ViewBag.State = state;
var states = _context.invoice_state.Select(c => new {
id = c.ID,
title = c.title
}).ToList();
ViewBag.States = new SelectList(states, "id", "title", _context.invoice_state.Where(e => e.alias == state).FirstOrDefault().ID);
return View();
}
@Html.DropDownList("invoice_state", (SelectList)ViewBag.States, "--Select One--")
正常に動作し、オプションが選択されている...しかし、私の編集上のほとんどの設定と同じされたビューが動作しません。コントローラで
:
public async Task<IActionResult> Edit(int? id)
{
var invoice = await _context.invoice
.Include(_item => _item.invoice_state).SingleOrDefaultAsync(m => m.ID == id);
if (invoice == null)
{
return NotFound();
}
string state = "start_finish"; // as a default
var states = _context.invoice_state.Select(c => new { id = c.ID, title = c.title }).ToList();
if (null != invoice.invoice_state)
{
ViewBag.State = invoice.invoice_state.alias;
}
else
{
ViewBag.State = state;
}
ViewBag.States = new SelectList(states, "id", "title", _context.invoice_state.Where(e => e.alias == state).FirstOrDefault());
return View(invoice);
}
と編集ビュー
@Html.DropDownList("invoice_state", (SelectList)ViewBag.States, "--Select One--")
私はすべての場所で読んでいると、複数のファイルをアップ配線されていない単純な答えを見つけることができませんで、それらのものでさえ、私を必要性に導く助けにはなりませんでした。私もそれを強制しようとしているし、それは動作していませんが、それもここに配置する価値があると思った。
ViewBag.States = _context
.invoice_state
.Select(c => new SelectListItem {
Value = c.ID.ToString(),
Text = c.title
})
.Select(l => new SelectListItem {
Selected = (l.Value == invoice.invoice_state.ID.ToString()),
Text = l.Text,
Value = l.Value
});
だけ私は前のような選択に.ToList()
を追加した場合'Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable<Microsoft.AspNetCore.Mvc.Rendering.SelectListItem>' to 'Microsoft.AspNetCore.Mvc.Rendering.SelectList'
またはエラーのリストのバージョンを取得します。
一部の人
は、選択した値を設定することが示唆されている、と私はそれを読むと、それは私が<select asp-for="invoice_state" asp-items="@ViewBag.States" >
<option>Please select one</option>
</select>
それはどちらか動作しません、参照を使用している場合
if (null != invoice.invoice_state)
{
ViewBag.invoice_stateID = invoice.invoice_state.ID;
}
else
{
ViewBag.invoice_stateID = _context.invoice_state.Where(e => e.alias == "start_finish").FirstOrDefault().ID;
}
、のようになりますリストは選択されていません。最後に、私がそれを選択して提出すると、データベースの値が設定されます。編集に戻ったときに、再び何かを再度選択することができません。
また
<dt>
@Html.DisplayNameFor(model => model.invoice_state)
</dt>
<dd>
@Html.DisplayFor(model => model.invoice_state)
</dd>
GETメソッドで 'invoice_state'プロパティの値を設定し、そのモデルをビューに渡す必要があります。あなたはそのコードを表示していません! (プロパティにバインドするときに 'SelectListItem'の' Selected'プロパティを設定するのは意味がありません) –
編集で私はプロパティをリセットする必要がありますか?私はデータベースに設定された値を持っています。モデルにあり、 'invoice'モデルを呼び出したときに' invoice_state'がnullでないことを確認するために '.Include(_item => _item.invoice_state)'を設定しました。上記のとおりです。 –
あなたは 'return view(yourmodel);'コードを表示していません。 'Invoice_state'は複雑なオブジェクトであり、複雑なオブジェクトにはバインドできません。バインドするには' int SelectedInvoice'というプロパティが必要です。 - '@Html.DropDownListFor(m => m.SelectedInvoice、(SelectList)ViewBag.States 、 " - 1つを選択する - ") ' - 常に強く型付けされたメソッドを使用します –