PDA

View Full Version : سوال: تولید کنترل داینامیک بر اساس جدول دیتابیس



jaykob
یک شنبه 05 آذر 1396, 09:21 صبح
با سلام


من یک جدول محصولات دارم و یک جدول خصوصیات محصول که به صورت داینامیک کاربر n تا خصوصیت برای یک محصول ایجاد می کنه ( رنگ ، اندازه ، ظرفیت و ... ) حالا بعد از تعریف این خصوصیات من می خوام کاربر بتونه این فیلد هایی که تعریف کرده رو مقدار دهی کنه و کنترل مناسبی جلو هر خصوصیت تولید بشه ( ۳ مدل هست string , bool , select ) که این مورد رو هم با یک فیلد کنترل می کنم . من الان به شدت در اینکه چطور باید این view رو تولید کنم که بر اساس رکورد دیتابیس باشه و کاربر بتونه مقدار مناسب رو بده مشکل دارم و نمی دونم دقیق باید چیکار کنم . ممنون می شم راهنمایی کنید

با تشکر

parvizwpf
یک شنبه 05 آذر 1396, 21:16 عصر
ببینید این کمک میکنه؟ :
https://stackoverflow.com/questions/26526229/how-to-create-dynamic-controls-based-on-value-in-database-using-mvc-4

jaykob
دوشنبه 06 آذر 1396, 10:59 صبح
سلام

نه متاسفانه . من بیشتر گیج شدم

jaykob
چهارشنبه 08 آذر 1396, 16:12 عصر
سلام

دوستان کسی نمی تونه یک راهنمایی کاربری به من بکنه که من بتونم یک صفحه کنترلش هاش رو از روی دیتابیس تولید کنم ؟

ممنون

Moien Tajik
چهارشنبه 08 آذر 1396, 16:37 عصر
مقدار هارو داخل دیتابیس ذخیره کنید ; بر اساس این پاسخ از دیتابیس مقادیر رو دریافت و کنترل هارو ایجاد کنید : https://stackoverflow.com/a/26629885/6661314

jaykob
چهارشنبه 08 آذر 1396, 16:50 عصر
مقدار هارو داخل دیتابیس ذخیره کنید ; بر اساس این پاسخ از دیتابیس مقادیر رو دریافت و کنترل هارو ایجاد کنید : https://stackoverflow.com/a/26629885/6661314

ممنون .

من جداول رو انجام دادم . الان مشکل نمایش کنترل های داینامیک هست

توی این لینکی که دادید یک جا این رو نوشته

In controller modify the GetControl method as

متوجه نمی شم این رو باید کجا و چطور انجام بدم

و اینکه در نهایت در view مقدار ها داده شد چطور از روی viewmodel مقادیر رو داخل دیتابیس پر کنم

ممنون می شم یک راهنمایی عمیق تر بکنید

Moien Tajik
چهارشنبه 08 آذر 1396, 23:17 عصر
این یک مثال برای شروع ; میتونید خودتون Customize کنیدش و Control های بیشتری بهش اضافه کنید.

jaykob
یک شنبه 12 آذر 1396, 17:01 عصر
این یک مثال برای شروع ; میتونید خودتون Customize کنیدش و Control های بیشتری بهش اضافه کنید.

سلام مدیر عزیز

ممنون که با این مثال من رو کامل متوجه کردید . این یک مشکل رو هم بگید من چطور حل کنم ممنون می شم

الان من طبق روند شما جلو رفتم و همه چی اوکی هست ولی من می خوام این فیلد ها که پر شد رو به یک Action نوع post بفرستم که بتونم داخل دیتابیس ذخیره کنم . اومدم view رو به این شکل تغییر دادم :



@model DynamicControls.ViewModels.HomeViewModel

@{
ViewBag.Title = "Dynamic Controls";
}

<h2>@ViewBag.Title</h2><hr />

@using (Html.BeginForm("Index", "Home", FormMethod.Post, new {enctype = "multipart/form-data"}))
{

<h3>Contents of this page has been generated dynamically : </h3>

@Html.EditorFor(m => m.ControlList, "CustomControl")

<button type="submit" class="btn btn-primary">ارسال</button>
}




و یک اکشن هم به شکل زیر برای تست زدم :



[HttpPost]
public ActionResult Index(HomeViewModel home)
{
return Content("ok");
}


و یک برک پوینت گذاشتم اما مقداری که به ویو مدل ارسال می شه null هست . نمی دونم باید چکار کنم که بتونم مقادیر رو ارسال کنم به یک اکشن که بشه ذخیرشون کرد چون بون ذخیره کردن کار جلو نمی ره

ممنون بابت وقتتون

تشکر

Moien Tajik
دوشنبه 13 آذر 1396, 10:13 صبح
چون HomeViewModel داخلش لیستی از ControlInfo هارو دریافت میکنه در اکشن null دریافت میکنید.
برای دریافت اطلاعات صحیح به این شکل باید عمل کنید ، یعنی بطور صریح name فیلدهارو بعنوان ورودی اکشن دریافت کنید :



[HttpPost]
public ActionResult Index(string firstName, bool isAdmin)
{
return Content("Ok");
}

jaykob
دوشنبه 13 آذر 1396, 10:32 صبح
چون HomeViewModel داخلش لیستی از ControlInfo هارو دریافت میکنه در اکشن null دریافت میکنید.
برای دریافت اطلاعات صحیح به این شکل باید عمل کنید ، یعنی بطور صریح name فیلدهارو بعنوان ورودی اکشن دریافت کنید :



[HttpPost]
public ActionResult Index(string firstName, bool isAdmin)
{
return Content("Ok");
}



سلام

ممنون از پاسختون

ولی متاسفانه نمی شه . من الان داخل فرمم شاید ۱۰ تا کنترلر درست بشه که کاربر پر می کنه ولی خوب اگر اسم فیلد رو بزاریم یک پارامتر رو شامل می شه . یک لیستی از اون مدل رو هم به عنوان ورودی گذاشتم باز Null می آد

ممنون می شم راهنمایی کنید

با تشکر

Moien Tajik
دوشنبه 13 آذر 1396, 13:34 عصر
برای همچین کاری مجبور هستید که ControlName همه ی Control هارو یکسان بزارید ، بعنوان مثال به این شکل :

_controls = new List<ControlInfo>
{
new ControlInfo
{
ControlType = "TextBox",
ControlName = "items",
ControlID = "firstname",
ControlLabel = "Name",
ControlValue = "Moien"
},
new ControlInfo
{
ControlType = "Checkbox",
ControlName = "items",
ControlID = "isAdmin",
ControlLabel = "Admin",
ControlValue = "Admin ?",
IsChecked = false
}
};


در این صورت باید در اکشن POST ، آرایه ای از items رو دریافت کنید :

[HttpPost]
public ActionResult Index(string[] items)
{
return Content("Ok");
}


با این روش بصورت Dynamic اطلاعات رو دریافت میکنید ، اما برای تشخیص اینکه نوع کنترلی که Value از سمتش میاد چی هست ، میتونید به ابتدای value ها ، type کنترل رو اضافه کنید.
مثال :

<input type="text" name="@controlInfo.ControlName" id="@controlInfo.ControlID" value="input::@controlInfo.ControlValue" class="form-control" />

و به این شکل Type کنترل رو هم دریافت میکنید و داخل دیتابیس ذخیره میکنید و بعدا موقع Retreive کردن از دیتابیس ، بر اساس type که قبل از :: گذاشتید با Switch کردنش ، کنترل مربوط رو Render میکنید.