0

ドロップダウン選択のIDを取得して、外部キーとしてテーブルに配置できるようにするために、コントローラーのPOSTセクションでデータベースを照会する必要のないドロップダウンが必要です。そのクエリを実行する必要がないのに、どのようにダウンする可能性があるのか​​わかりません。それが理にかなっているなら、私はエンティティフレームワークにそれのために重労働をしてもらいたいですか?これは可能ですか?

public class BillRate
   {
        public BillRate()
        {
            this.BillRateTickets = new List<Ticket>();
        }

        public long BillRateID { get; set; }
        public decimal TicketBillRate { get; set; }
        public virtual ICollection<Ticket> BillRateTickets { get; set; }
    }

public class Ticket
    {


        public long TicketID { get; set; }

        public virtual BillRate BillRate { get; set; }

    }
4

1 に答える 1

1

正確に何を意味するのかは明確ではありません。データベースにクエリを実行しない場合、ドロップダウンリストに表示されるアイテムはどこから来ると思いますか?<select>HTMLでは、要素を含むフォームを送信すると、選択した値のみがサーバーに送信されるため、これらはビューからは明らかに表示されません。コレクション値が送信されることはないため、ASP.NETMVCはそれらの値を作成できません。

データベースへのアクセスを回避したい場合は、このリストをキャッシュに保存し、POSTアクション内で最初にキャッシュ内の値を探してみてください。ただし、これらの値はサーバーのどこかに保持する必要があります。したがって、最初にキャッシュ内の値を検索し、見つからない場合はデータベースにクエリを実行するメソッドを作成できます。

private IEnumerable<Ticket> GetTickets()
{
    // Try to get the tickets from the cache first:
    var tickets = MemoryCache.Default["tickets"] as IEnumerable<Ticket>;
    if (tickets == null)
    {
        // not found in cache, let's fetch them from the database:
        tickets = db.Tickets.ToList();
        // and now store them into the cache so that next time they will be available
        MemoryCache.Default.Add("tickets", tickets, new CacheItemPolicy { Priority = CacheItemPriority.NotRemovable });
    }

    return tickets;
}

次に、2つのコントローラーアクションを実行できます。

public ActionResult Index()
{
    var model = new BillRate();
    model.BillRateTickets = GetTickets();
    return View(model);
}

[HttpPost]
public ActionResult Index(BillRate model)
{
    model.BillRateTickets = GetTickets();
    return View(model);
}
于 2013-02-08T07:27:18.383 に答える