در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

چگونگی استفاده از ModelBinder در ASP.NET MVC

در این مقاله قصد دارم تا در مورد ModelBinder ها در ASP.NET MVC توضیح بدم. ModelBinder ها زمانی به کار می آیند که قصد داشته باشید مقادیر پارامتر ورودی یک Action رو از یک منبع دلخواه پر کنید. برای آشنایی بیشتر یک مثال میزنم. برای این مثال از ASP.NET MVC 3 استفاده کردم، کد این مثال با اندکی تغییر در MVC 2 هم قابل استفاده هست.یک پروژه داخل Visual Studio 2010 ایجاد کنید و نام اون رو ModelBinding بذارید. یک View در مسیر Views/Home با نام Index اضافه کنید و کد داخل اون رو به صورت زیر تغییر بدید:

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <title>Index</title>
</head>
<body>
    <div>
        @using (Html.BeginForm("Submit", "Home", FormMethod.Post))
        {
            <label>FirstName </label><input type="text" id="firstName" name="firstName" />
            <label>FirstName </label><input type="text" id="lastName" name="lastName" />
            <input type="submit" value="submit" />
        }
    </div>
</body>
</html>

در قدم بعدی یک Controller با نام Home اضافه کنید، کد این Controller به صورت زیر می باشد:

using System.Web.Mvc;
namespace ModelBinding.Controllers
{
    public class HomeController : Controller
    {
        public ViewResult Index()
        {
            return View();
        }


        [HttpPost]
        public ActionResult Submit(Models.Person person)
        {
            // put your code here...
            return null;
        }
    }
}

یک Model هم با نام Person با کد زیر به Model های پروژه اضافه کنید:

namespace ModelBinding.Models
{
    public class Person
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
}

در این مرحله ما می خواهیم بعد از کلیک کردن بر روی دکمه Submit در صفحه Index، عملیات داخل Submit Action در HomeController اجرا شود، اما یک مشکلی هست، پارامتر Person در حال حاضر null خواهد بود. برای حل این مشکل ما باید از ModelBinder ها استفاده کنیم، با استفاده از ModelBinder هنگام اجرای Action در صورتی که پارامتر ورودی Action مقدار داده نشده باشد، ModelBinder صدا زده شده و این پارامتر مقدار دهی می شود. برای مرحله بعدی، ما باید یک ModelBinder تعریف کنیم، برای این کار یک کلاس با نام PersonModelBinder تعریف کنید که این کلاس از کلاس DefaultModelBinder مشتق می شود:

using System.Web.Mvc;
namespace ModelBinding.Infrastructure
{
    public class PersonModelBinder : DefaultModelBinder
    {
        public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
            if(bindingContext.ModelType == typeof(Models.Person))
            {
                var person = new Models.Person();
                person.FirstName = controllerContext.HttpContext.Request.Form["firstName"];
                person.LastName = controllerContext.HttpContext.Request.Form["lastName"];
                return person;
            }
            return base.BindModel(controllerContext, bindingContext);
        }
    }
}

برای مرحله بعد، باید این ModelBinder به برنامه ما اضافه شود، برای این کار داخل فایل Global.asax.cs کد زیر را داخل متد Application_Start، در انتهای کدهای نوشته شده قرار دهید:

ModelBinders.Binders.Add(typeof(Models.Person), new Infrastructure.PersonModelBinder());
ModelBinders.Binders.DefaultBinder = ModelBinders.Binders[typeof(Models.Person)];

با تعریف PersonModelBinder و اضافه کردن اون به ModelBinder های برنامه، در صورتی که پارامتر person مربوط به Submit Action مقدار نداشته باشد، از طریق Binder تعریف شده مقدار خواهد گرفت، پس از انجام مراحل بالا و اجرای برنامه، در صورتی که روی دکمه Submit کلیک کنیم، خواهیم دید که پارامتر person در Submit Action مقدار دارد. یکی از نکاتی که باید به آن توجه کرد این است که input text های که داخل تگ form در Index View تعریف شده اند، پس از post، داخل دیکشنری HttpContext.Request.Form قرار می گیرند که می توان به راحتی از داخل Binder به آنها دسترسی داشت.

نویسنده : حسین احمدی

منبع : جزیره برنامه نویسی وب سایت توسینسو

هرگونه نشر و کپی برداری بدون ذکر نام نویسنده و منبع دارای اشکال اخلاقی است

#آموزش_asp.net_mvc #آموزش_ساخت_modelbinder #ساخت_modelbinder #آموزش_asp.net
0 نظر

هیچ نظری ارسال نشده است! اولین نظر برای این مطلب را شما ارسال کنید...

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره تابستانه می تونی امروز ارزونتر از فردا خرید کنی ....