متصل کردن CheckBoxList به پایگاه داده با استفاده از Model در ASP.Net MVC Razor
پنجشنبه 6 آبان 1395در این مقاله، ما با ارائه یک مثال نحوه متصل کردن CheckBoxList به پایگاه داده با استفاده از Model در ASP.Net MVC Razor را توضیح خواهیم داد . Asp.Net MVC دارای کنترل CheckBoxList نمیباشد و با استفاده از کلاس SelectListItem به عنوان Model ، در Asp.Net Mvc Razor یک CheckBoxList ساخته میشود .
شما میتوانید کدها و پایگاه داده را از طریق فایلی که به این مقاله ضمیمه شده است ، دانلود کنید .
پایگاهداده :
پایگاه داده مثالی که قصد ارائه آن را داریم ، دارای یک جدول با نام Fruit است و جدول آن همانند زیر است :
جدول Fruit رکوردهای زیر را دارد :
Namespaceها :
شما باید namespaceهای زیر را اضافه کنید :
using System.Configuration; using System.Data.SqlClient; using System.Collections.Generic;
Model :
در این مقاله ما از SelectListItem که یک کلاس ساخته شده در ASP.Net MVC است ، به عنوان Model استفاده میکنیم . این تمام کلاس های لازم برای CheckBoxList را دارد .
Controller :
Controller ما دارای دو Action Methode خواهد بود :
• متد برای مدیریت عملیات های GET :
درون این متد ، رکوردهای پایگاه داده با استفاده از DataReader و GenericListای از کلاس SelectListItem ، بازیابی خواهند شد FruitName ، در Text property ذخیره خواهد شد ، در حالی که FruitId در Value property ذخیره خواهد شد .
• متدی برای مدیریت عملیات های POST :
این متد فراخوانی هایی که از سمت View با POSt انجام میشود را ، مدیریت خواهد کرد .
زمانی که Form ثبت شد ، مقادیر POST شده در شی ای از کلاس SelectListItem ثبت و ضبط خواهد شد .
سپس ، حلقه ای از GenericListای از کلاس SelectListItem ، اجرا خواهد شد ، که Fruit names هایی که انتخاب شده اند را بعدا توسط Alert نمایش خواهد داد .
public class HomeController : Controller { // GET: Home public ActionResult Index() { List<SelectListItem> items = new List<SelectListItem>(); string constr = ConfigurationManager.ConnectionStrings["Constring"].ConnectionString; using (SqlConnection con = new SqlConnection(constr)) { string query = " SELECT FruitName, FruitId FROM Fruits"; using (SqlCommand cmd = new SqlCommand(query)) { cmd.Connection = con; con.Open(); using (SqlDataReader sdr = cmd.ExecuteReader()) { while (sdr.Read()) { items.Add(new SelectListItem { Text = sdr["FruitName"].ToString(), Value = sdr["FruitId"].ToString() }); } } con.Close(); } } return View(items); } [HttpPost] public ActionResult Index(List<SelectListItem> items) { ViewBag.Message = "Selected Items:\\n"; foreach (SelectListItem item in items) { if (item.Selected) { ViewBag.Message += string.Format("{0}\\n", item.Text); } } return View(items); } }
View :
در View ، در خطا اول همانطور که مشاهده میکنید کلاس SelectListItem به عنوان یک Model برای View معرفی شده است . View شامل یک HTML Form است که در اینجا با استفاه از متد HTML BeginForm ساخته شده است . که دارای پارامتر های زیر میباشد :
ActionName : در قسمت اول نام Action مورد نظر قرار میگیرد ، که در اینجا Inedx است .
ControllerNaem : در قسمت دوم ، نا م Controller قرار میگیرد ، که در اینجا نام Controller ما Home است .
FormMethode : در قسمت بعدی نوع متد فرم را مشخص میکنیم که در این مورد از POST استفاده میکنیم .
درون Form ، یک حلقه بر روی GenericListای از کلاس SelectListItem ، اجرا خواهد شد . یک جدول ساخته خواهد شد که شامل یک CheckBox و دو HiddenFields خواهد بود .
نکته : HiddenFieldsبرای ذخیره کردن Text و مقدار checkBox و فرستادن آن در زمان Submit کردن ، مورد استفاده قرار میگیرد . همچنین آنها برای نگهداری از Text و مقدار CheckBoxدر زمان ثبت Form ، بسیار مناسب هستند .
زمانی که دکمه "ثبت" کلیک شد ، فرم ثبت خواهد شد و شی Model به Controller ارسال میشود . سپس نام Fruit با استفاده از JavaScript Alert Message Box نمایش داده خواهد شد .
@model List<SelectListItem> @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width"/> <title>Index</title> <style type="text/css"> body { font-family: Arial; font-size: 10pt; } </style> </head> <body> @using (Html.BeginForm("Index", "Home", FormMethod.Post)) { <table> @for (int i = 0; i < Model.Count(); i++) { <tr> <td> @Html.CheckBoxFor(m => m[i].Selected) </td> <td> @Html.DisplayFor(m => m[i].Text) @Html.HiddenFor(m => m[i].Value) @Html.HiddenFor(m => m[i].Text) </td> </tr> } </table> <br/> <input type="submit" value="Submit"/> } @if (ViewBag.Message != null) { <script type="text/javascript"> window.onload = function () { alert("@ViewBag.Message"); }; </script> } </body> </html>
در خروجی داریم :
آموزش asp.net mvc
- ASP.net MVC
- 2k بازدید
- 6 تشکر