عدم اتصال چندین باره به بانک اطلاعاتی
سلام
وقتی می خواهم حالت وضیعت را در یک DropDownListFor نمایش بدهم در view های مختلف هربار مجبور به بانک اطلاعاتی متصل شوم و باتوجه به اینکه دادهای جدول مورد نظر همیشه ثابت هست (3داده وجود دارد)آیا راهی وجود دارد که اصلا به بانک متصل نشوم و یا حداقل وقتی برنامه توسط کاربر اجرا میشود از بانک خوانده شود
باتشکر
4 پاسخ
سلام و درود
چند راه حل دارید:
راه حل 1: مقدار دهی بصورت استاتیک
اگر فقط در یک ویو قرار است از آن استفاده کنید
@{
var list = new SelectList(new []
{
new {ID="1", Name="item1"},
new {ID="2", Name="item2"},
new {ID="3", Name="item3"},
new {ID="4", Name="item4"},
},
"ID", "Name", 1);
}
@Html.DropDownList("list", list)
راه حل 2: مقدار دهی بصورت استاتیک
اگر می خواهید در چند ویو از آن استفاده کنید بهتر است کد فوق را در یک پارشیال ویو قرار دهید
راه حل 3: مقدار دهی بصورت داینامیک
می توانید از قابلیت اتریبیوت [OutputCache] در بالای اکشنی که جهت تغذیه مقادیر برای کومبو است استفاده کنید و آن اکشن (کش شده) را در اکشنی که ویوی شما استفاده می کند فراخوانی نموده (مثلا با یک ویوبگ) و به ویو پاس دهید
سلام
چون دیتای ثابت دارید بهترین گزینه استفاده از راه حل های 1 و 2 می باشد
ولی اگر می خواهید حتما از دیتابیس خوانده شود و Cache بشود این لینک را مشاهده نمایید یا از Ajax استفاده کنید ولی پیشنهاد نمی کنم برای همین راه حل 3 گفتم
راه حل ساده دیگه هم استفاده از یک متغیر و متد استاتیک است
// متغیر استاتیک
static System.Collections.Generic.List<Models.Person> lstCombo;
// متد استاتیک
public static System.Collections.Generic.List<Models.Person> FixData()
{
if (lstCombo == null)
{
Models.DatabaseContext Db = new Models.DatabaseContext();
lstCombo = Db.People.ToList();
}
return lstCombo;
}
public System.Web.Mvc.ActionResult Create()
{
ViewBag.ComboId =
new System.Web.Mvc.SelectList
(items: FixData(), dataValueField: "Id", dataTextField: "Name", selectedValue: null);
return (View());
}
در ویو هم
@Html.DropDownList("ComboId", null, htmlAttributes: new { @class = "form-control" })
با سلام. در چنین مواردی ، بهتر هست که داده های مربوطه که از دیتابیس فراخونی میشه رو بصورت cache نگهداری کنید .
مثلا در اجرای اولیه برنامه در یک متغییر Static ذخیره سازی رو صورت بدید یا بهتراز اون از یک سیستم cache مثل redis استفاده کنید و داده ها رو اونجا نگهداری کنید .
سلام
برای راه حل3 میشه یک مثال بنویسید