0

آموزش MVC

 
mtk_designer
mtk_designer
کاربر برنزی
تاریخ عضویت : آذر 1390 
تعداد پست ها : 157

پیاده سازی قابلیت های ساده ی CRUD با تکنولوژی EF در MVC

پیاده سازی قابلیت های ساده ی CRUD با تکنولوژی EF در برنامه ی تحت وب ASP.NET MVC

در فصل قبلی یک برنامه ی MVC نوشتیم که داده ها را با بهره گیری از تکنولوژی EF و SQL Server LocalDB ذخیره کرده و نمایش می داد. در مبحث حاضر کدهای CRUD (ایجاد کردن، خواندن، بروز رسانی و حدف) را که به صورت خودکار توسط امکان MVC scaffolding ایجاد می شود ویژه ی controller ها و view ها مورد بازبینی قرار داده و سفارشی تنظیم می کنیم.

نکته: رسم بر این است که برای ایجاد یک لایه ی انتزاعی (abstraction layer) بین controller و لایه ی دسترسی داده (data access layer)، الگوی طراحی Repository را پیاده سازی کرد. در مقاله های آموزشی به منظور قرار دادن تمرکز بر روی آموزش نحوه ی استفاده از خود EF، از الگوی طراحی Repository استفاده نمی شود.

در درس حاضر، صفحات وب زیر را ایجاد خوهیم کرد:

 

 

image

 

 

image

 

image

 

image

ایجاد یک صفحه به نام Details

کدی که توسط قابلیت scaffolding برای صفحه ی Index ایجاد شده، خاصیت Enrollments را به کدهای اضافه نکرده است، زیرا خاصیت ذکر شده دارای یک مجموعه (collection) می باشد. در صفحه ی Details، محتوای مجموعه ی مورد نظر را در یک جدول HTML نمایش خواهیم داد.

در فایل Controllers\StudentController.cs، یک action method برای Details view وجود دارد که با استفاده از متدFind، یک موجودیت Student را بازیابی می کند.

  public ActionResult Details(int? id)

        {

            if (id == null)

            {

                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);

            }

            Student student = db.Students.Find(id);

            if (student == null)

            {

                return HttpNotFound();

            }

            return View(student);

        }

مقدار کلید به عنوان پارامتر id به متد ارسال می شود که از route data ی لینک Details موجود در صفحه ی  Index گرفته شده.

داده های مسیریابی (Route data)

Route data ، درواقع اطلاعاتی هستند که model binder در یک بخش از URL، تعریف شده در جدول مسیریابی، آن ها را می یابد. به عنوان مثال، مسیر پیش فرض (default route) قسمت های controller، action و id را مشخص می کند:

         routes.MapRoute(

    name: "Default",

    url: "{controller}/{action}/{id}",

    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }

);

در URL نمونه ی زیر، مسیر پیش فرض Instructor را به عنوان controller، Index را به عنوان action و 1 را به عنوان idنگاشت می کند؛ اقلام ذکر شده همگی مقادیر route data محسوب می شوند.

http://localhost:1230/Instructor/Index/1?courseID=2021

"?courseID=2021"  درواقع یک query string است. اگر id را به عنوان مقدار query string ارسال کنید، model binderبازهم کار خواهد کرد:

http://localhost:1230/Instructor/Index?id=1&CourseID=2021

URL  ها توسط دستورهای ActionLink در Razor view ایجاد می شوند. در کد زیر، پارامتر id با مسیر پیش فرض مطابقت دارد، بنابراین id به route data اضافه می شود.

@Html.ActionLink("Select", "Index", new { id = item.PersonID  })

اما در کد نمونه ی زیر، courseID با پارامتر تعریف شده در مسیر پیش فرض مطابقت ندارد، بنابراین به عنوان یک query string اضافه شده است.

@Html.ActionLink("Select", "Index", new { courseID = item.CourseID })

1.     فایل Views\Student\Details.cshtml را باز کنید. همان طور که در مثال زیر مشاهده می کنید، هریک از فیلدها به کمک یک DisplayFor helper نمایش داده می شود:

  &<dt>

    @Html.DisplayNameFor(model => model.LastName)

</dt>

<dd>

    @Html.DisplayFor(model => model.LastName)

</dd>

2.     پس از فیلد EnrollmentDate و درست قبل از تگ پایانی </dl>، کد رنگی شده ی زیر را برای نمایش فهرستی ازenrollment ها، درج کنید:

    <dt>

            @Html.DisplayNameFor(model => model.EnrollmentDate)

        </dt>

 

        <dd>

            @Html.DisplayFor(model => model.EnrollmentDate)

        </dd>

        

            

        

        

            

                

                    

                    

                

                

                

                    

                        

                            

                        

                        

                          

                        

                    

                

            

        

    </dl>

</div>

<p>

    @Html.ActionLink("Edit", "Edit", new { id = Model.ID }) |

    @Html.ActionLink("Back to List", "Index")

</p>

 

چنانچه تورفتگی کدها پس از جایگذاری (paste)، دچار بهم ریختگی شد، کلید های CTRL-K-D را همزمان فشار داده تا مرتب شود.

 

این کد داخل entity های موجود در Enrollments navigation property، حلقه می زند. به ازای هر یک از موجودیت هایEnrollment، فیلدهای course title و grade را نمایش می دهد. course title از موجودیت Course بازیابی شده که در این موجودیت در Course navigation property موجودیت Enrollments ذخیره گردیده است. تمامی این داده ها به صورت خودکار از پایگاه داده و در صورت نیاز بازیابی می شوند. (به عبارتی دیگر، در این اینجا از قابلیت بارگذاری با تاخیر یاlazy loading استفاده می شود. به این خاطر که eager loading را برای Courses navigation  property تعریف نکرده اید، enrollment ها در query یکسان که student ها را بازیابی کرد، برگردانده نشده اند. در عوض، اولین باری که سعی می کنید به Enrollments navigation property دسترسی پیدا کنید، یک query جدید برای بازگردانی داده های مورد نظر به پایگاه داده ارسال می شود.)

3.     با انتخاب تب Students و کلیک بر روی یک لینک Details برای Alexander Carson، صفحه را اجرا کنید. (اگر کلیدهای CTRL+F5 را به هنگام باز بودن فایل Details.cshtml فشار دهید، یک پیغام خطای HTTP 400 دریافت می کنید، زیرا Visual Studio تلاش می کند صفحه ی Details را اجرا کند ولی دسترسی از طریق لینکی صورت نگرفته که در آن نمایش دادن student تعریف شده باشد. جهت حل این مشکل، کافی است"Student/Details" را URL حذف کرده و مجددا امتحان کنید و یا مرورگر را بسته، بر روی پروژه راست کلیک کرده وView را انتخاب کنید، سپس View in Browser را کلیک نمایید.)

در زیر فهرست دوره های آموزشی (course) و نمره های (grade) دانشجوی مورد نظر را مشاهده می کنید:

 

image

 

بروز رسانی صفحه ی Create

1.     در فایل Controllers\StudentController.cs، متد اکشن HttpPost Create را با کد زیر جایگزین کنید تا یک قطعه کد try-catch به آن اضافه نموده و ID را از متد ساخته شده توسط scaffolding حذف کنید:

[HttpPost]

[ValidateAntiForgeryToken]

public ActionResult Create([Bind(Include = "LastName, FirstMidName, EnrollmentDate")]Student student)

{

    try

    {

        if (ModelState.IsValid)

        {

            db.Students.Add(student);

            db.SaveChanges();

            return RedirectToAction("Index");

        }

    }

    catch (DataException /* dex */)

    {

        //Log the error (uncomment dex variable name and add a line here to write a log.

        ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists see your system administrator.");

    }

    return View(student);

}

 .2این کد موجودیت Student ایجاد شده توسط ASP.NET MVC model binder را به Students entity set اضافه کرده، سپس تغییرات را در پایگاه داده ذخیره می کند. (Model binder درواقع به یک قابلیت ASP.NET MVC اشاره دارد که به شما کمک می کند با داده های ارسال شده توسط یک فرم آسان تر کار کنید؛ model binder همچنین نوع مقادیر ارسالی فرم را به نوع های CLR تبدیل کرده و آن را در قالب پارامترهایی به action method مورد نظر پاس می دهد. در این نمونه، model binder به وسیله ی مقادیر property، از مجموعه ی Form یک موجودیت  Student نمونه سازی کرده است.)

به این خاطر ID را از خصیصه ی Bind حذف می کنیم که ID یک مقدار primary key هست که SQL Server به صورت خودکار هنگامی که سطر درج می شود، تنظیم می کند. ورودی دریافتی از کاربر مقدار ID را تنظیم نمی کند.

نکته ی امنیتی: خصیصه ی ValidateAntiForgeryToken از حملات جعل درخواست سایت متقابل (cross-site request forgery) جلوگیری می کند. به ازای خصیصه ی ذکر شده بایستی یک دستور Html.AntiForgeryToken()  متناظر در viewبکار برد، که بعدا به آن خواهیم پرداخت.

خصیصه ی Bind یکی از روش های مقابله با حمله ی over posting (پست های پست سرهم) در سناریوها یا عملیاتcreate می باشد. برای مثال، فرض کنید موجودیت Student دارای یک خاصیت Secret است که شما به هردلیلی نمی خواهید این صفحه آن را مقداردهی کند.

 public class Student

   {

      public int ID { get; set; }

      public string LastName { get; set; }

      public string FirstMidName { get; set; }

      public DateTime EnrollmentDate { get; set; }

      public string Secret { get; set; }

      public virtual ICollection<Enrollment> Enrollments { get; set; }

   }

حتی اگر هم فیلد Secret در صحفه ی وب خود ندارید، یک هکر می تواند به کمک ابزاری همچون fiddler و یا نوشتن مقداری کد جاوا اسکریپت، یک مقدار فرم Secret ارسال کند. خصیصه ی Bind فیلدهایی را که model binder حین ساختن یک نمونه ی Student استفاده می کند، محدود می سازد. بدون این خصیصه، model binder مقدار فرم Secretرا برای ساختن نمونه ی موجودیت Student بکار می برد، در پی آن هر مقداری که هکر برای فیلد فرم Secret تعیین کرده، در پایگاه داده ی شما نفوذ کرده و بروز رسانی می شود. تصویر زیر ابزار fiddler را نشان می دهد که یک فیلد Secret (با مقدار "OverPost") به مقادیر ارسالی فرم اضافه می کند:

 

 

image

 

 

بنابراین مقدار "OverPost" به صورت موفقیت آمیز به خاصیت Secret سطر درج شده اضافه می گردد، اگرچه شما به هیچ وجه نمی خواستید که صفحه ی وب مورد نظر آن خاصیت را مقداردهی کند.

از این رو توصیه می کنیم پارامتر Include را به همراه خصیصه ی Bind برای فیلدهای whitelist بکار ببرید.  همچنین می توان پارامتر Exclude را برای فیلدهای blacklist ای که نمی خواهید استفاده شوند، بکار ببرید. Include به این خاطر امن تر است که هنگامی که شما یک خصیصه ی جدید به entity مورد نظر اضافه می کنید، فیلد جدید به صورت خودکار توسط لیست Exclude محافظت نمی شود.

با خواندن موجودیت هایی اول از پایگاه داده و سپس فراخوانی TryUpdateModel به همراه لیستی از خاصیت های مجاز، از Overposting در زمان ویرایش جلوگیری می کنیم. این روشی است که در این آموزش مورد استفاده قرار می دهیم.

روش دیگری که بسیاری از برنامه نویسان آن را ترجیح می دهند، این است که بجای کلاس های entity از view modelهمراه با model binding استفاده کنید. در این روش، تنها خاصیت هایی را که می خواهید در view model بروز رسانی شود، اضافه (include) کنید. به مجرد اینکه MVC model binder کار خود را به اتمام رساند، خاصیت های view model را در نمونه ی entity جای گذاری کنید.برای این منظور ترجیحا از ابزاری همچون AutoMapper استفاده می کنیم. با استفاده از db.Entry برای نمونه ی entity، حالت (state) نمونه ی entity را روی unchanged تنظیم کنید، سپسProperty("PropertyName").IsModified را در هر خاصیت entity که در model جدید اضافه شده، بر روی true تنظیم کنید. این روش در هر دو سناریوی edit و create قابل استفاده می باشد.

به استثنای خصیصه ی Bind، قطعه کد try-catch تنها تغییری است که به کد ایجاد شده توسط scaffolding، وارد شد. اگر خطایی که از DataException مشتق می شود در حین ذخیره شدن ضبط (catch) شود، در آن صورت یک پیغام خطای عمومی (generic error message) صادر می شود. خطاهای DataException بیشتر از عوامل خارجی نشات می گیرند تا خطاهای مربوط به برنامه نویسی، بنابراین معمولا به کاربر توصیه می شود مجددا تلاش کند. یک برنامه ی کارآمد و باکیفیت باید قابلیت ثبت خطا (exception logging) را داشته باشد اما از آنجایی که برنامه یک نمونه ی آزمایشی بود، قابلیت مذکوردر آن پیاده سازی نشد.

کد موجود در فایل Views\Student\Create.cshtml شبیه به کدی است که در فایل Details.cshtml مشاهده کردید، با این تفاوت که در آن بجای DisplayFor ، helper های  EditorFor و ValidationMessageFor برای هریک از فیلدها بکار برده شده است.

<div class="form-group">

    @Html.LabelFor(model => model.LastName, new { @class = "control-label col-md-2" })

    <div class="col-md-10">

        @Html.EditorFor(model => model.LastName)

        @Html.ValidationMessageFor(model => model.LastName)

    </div>

</div>

فایل Create.chstml، تابع @Html.AntiForgeryToken() را نیز شامل می شود. این تابع به همراه خصیصه یValidateAntiForgeryToken در controller و به منظور مقابله با حملات جعل درخواست سایت متقابل (cross-site request forgery) مورد استفاده قرار می گیرد.

لازم نیست هیچ تغییری در فایل Create.chstml ایجاد کنید.

2.     با انتخاب تب Students و کلیک بر روی Create New، صفحه ی مورد نظر را اجرا نمایید.

3.     چندین اسم به ضمیمه ی یک تاریخ نامعتبر وارد کرده و با کلیک بر روی Create، پیام خطا را مشاهده نمایید.

 

 

image

 

 

این همان اعتبار سنجی در سمت سرویس دهنده است که به صورت پیش فرض دراختیار شما قرار می گیرد؛ در مباحث بعدی نحوه ی ایجاد اعتبارسنجی در سمت سرویس گیرنده را با افزودن خصیصه های جدید آموزش خواهیم داد. کدهای رنگی شده ی زیر model validation check در متد Create را نشان می دهد:

if (ModelState.IsValid)

{

    db.Students.Add(student);

    db.SaveChanges();

    return RedirectToAction("Index");

}

4.     تاریخ  فیلد  EnrolllmentDateرا به یک تاریخ معتبر تغییر داده و Create را کلیک نمایید. خواهید دید که دانشجوی جدید در صفحه ی Index ظاهر خواهد شد.

 

 

image

 

 

بروز رسانی متد Edit HttpPost

در فایل Controllers\StudentController.cs، متد HttpGet Edit (بدون خصیصه ی HttpPost) با استفاده از متد Findموجودیت Student انتخابی را بازیابی می کند، همان طور که در متد Details شاهد آن بودیم. لزومی ندارد این متد را اصلاح کنید.

اما، اکشن متد HttpPost Edit را با کد زیر جایگزین می کنیم:

[HttpPost, ActionName("Edit")]

[ValidateAntiForgeryToken]

public ActionResult EditPost(int? id)

{

    if (id == null)

    {

        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);

    }

    var studentToUpdate = db.Students.Find(id);

    if (TryUpdateModel(studentToUpdate, "",

       new string[] { "LastName", "FirstMidName", "EnrollmentDate" }))

    {

        try

        {

            db.SaveChanges();

 

            return RedirectToAction("Index");

        }

        catch (DataException /* dex */)

        {

            //Log the error (uncomment dex variable name and add a line here to write a log.

            ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists, see your system administrator.");

        }

    }

    return View(studentToUpdate);

}

تغییراتی که اعمال شد، یک روش بهینه ی امنیتی را پیاده سازی می کند که از حملات پست مکرر (overposting) جلوگیری می کند، scaffolder یک خصیصه ی Bind ایجاد کرده و نیز موجودیتی که توسط model binder ساخته شده را با یک Modified flag به entity set اضافه می کند. استفاده از چنین کدی دیگر توصیه نمی شود زیرا خصیصه ی Bind تمامی داده های از پیش موجود در فیلدهایی که داخل پارامتر Include آورده نشده را پاک می کند.در آینده، MVC controller scaffolder گونه ای بروز رسانی می شود که برای متدهای Edit سرخود خصیصه ی Bind ایجاد نکند.

کد جدید موجودیت جاری را خوانده و فیلدهای فرم را با ورودی های کاربر از داده های فرم ارسالی به وسیله ی فراخوانیTryUpdateModel بروز رسانی می کند. قابلیت ردیابی خودکار تغییر (automatic change trackingEF، Modified flag را به موجودیت (entity) مورد نظر متصل (set) می کند. به محض فراخوانی متد SaveChanges، Modified flag سبب می شود EF با ساخت دستورات SQL، سطر مورد نظر در پایگاه داده را بروز رسانی کند. تداخلات همزمانی (Concurrency conflicts) نادیده گرفته می شوند، همچنین تمامی ستون های سطر پایگاه داده (database row) از جمله آن ستون هایی که کاربر تغییر نداده، بروز رسانی می شوند.

یکی از بهترین روش های مقابله با پست مکرر (overposting)، این است که فیلدهایی که می خواهید توسط صفحه یEdit قابل بروز رسانی باشد، در پارامترهای TryUpdateModel مجاز اعلام (whitelist) کنید. در حال حاضر هیچ فیلد اضافه بر سازمانی وجود ندارد که از آن محافظت کنید، اما لیست کردن آن فیلدهایی که می خواهید model binder پیوند دهد (bind)، اطمینان حاصل می کند که اگر شما در آینده فیلدهایی را به data model اضافه کردید، آن فیلدها به صورت خودکار محافظت شوند و تا زمانی که آن ها را به صورت صریح به اینجا (در پارامترهای TryUpdateModel) اضافه نکرده اید، این روند ادامه یابد. 

در نتیجه ی این تغییرات، ورودی ها و خروجی های متد HttpPost Edit (HttpPost Edit method signature) با امضای متد HttpGet edit یکسان می باشد؛ بنابراین متد را به EditPost تغییر نام می دهیم.

وضعیت های موجودیت (Entity States) و متدهای SaveChanges

Database context بررسی می کند آیا موجودیت های داخل حافظه با سطرهای متناظر در پایگاه داده همگام است یا خیر، سپس آن اطلاعات را ضبط می کند. این اطلاعات تعیین می کند هنگامی که شما متد SaveChanges را صدا می زنید، چه اتفاقی رخ دهد. به عنوان مثال، زمانی که یک موجودیت جدید را به متد Add  پاس می دهید، وضعیت آن موجودیت بر روی Added  تنظیم می شود. سپس هنگامی که متد SaveChanges را صدا می زنید، database context یک دستور SQL INSERT  صادر می کند.

یک موجودیت می تواند در وضعیت های زیر قرار داشته باشد:

وضعیت Added. در این حالت موجودیت مورد نظر هنوز در پایگاه داده موجود نمی باشد. تابع SaveChangesبایستی یک دستور INSERT صادر کند.

Unchanged. نیازی نیست متد SaveChanges بر روی این موجودیت تغییر اعمال کند. هنگامی که شما یک entity را از پایگاه داده می خوانید، موجودیت ابتدا در این وضعیت قرار دارد.

Modified. در این وضعیت برخی و یا تمام مقادیر property موجودیت، اصلاح شده است. در این حالت متدSaveChanges بایستی یک دستور UPDATE صادر کند.

Deleted. موجودیت مورد نظر برای حذف شدن علامت گذاری شده است. SaveChanges باید یک دستور DELETEصادر کند.

DetachedDatabase context هیچ اطلاعی از موجودیت ندارد.

در یک برنامه ی تحت ویندوز، تغییرات وضعیت معمولا به صورت خودکار تنظیم می شوند. در برنامه های تحت ویندوز، یک موجودیت را می خوانیم و تغییراتی را به مقادیر خاصیت (property) آن اعمال می کنیم. این امر سبب می شود وضعیت برنامه به صورت اتوماتیک بر روی Modified تنظیم شود. سپس به هنگام فراخوانی متد SaveChanges، EF یک دستورSQL UPDATE اجرا می کند که تنها property هایی را بروز رسانی می کند که شما تغییر دادید.

نظر به اینکه ذات برنامه های تحت وب مجزا می باشد، امکان این پیوستگی و توالی منظم وجود ندارد. DbContext ای که یک موجودیت را می خواند، بلافاصله پس از جرا و نمایش (render)صفحه، دور انداخته می شود.  هنگامی که اکشن متدHttpPost Edit  صدا زده می شود، یک درخواست جدید شکل گرفته و در پی آن شما یک نمونه از DbContext خواهید داشت، از این رو شما مجبور می شوید به صورت دستی وضعیت entity را بر روی Modified تنظیم نمایید. سپس هنگامی که شما متدSaveChanges فراخوانی می کنید، EF تمامی ستون های سطر پایگاه داده را بروز رسانی می کند، چون که context هیچ راهی برای آگاهی یافتن از اینکه کدام property ها اصلاح شده اند ندارد.

اگر می خواهید دستور SQL Update فقط آن فیلدهایی را که کاربر تغییر داده بروز رسانی کند، می توانید مقادیر اصلی را با استفاده از روشی همچون فیلدهای مخفی ذخیره نگه دارید تا زمان فراخوانی HttpPost Edit، مقادیر اولیه دردسترس باشند. پس از آن شما می توانید با استفاده از مقادیر اصلی یک موجودیت Student ایجاد کرده، متد Attach را همراه با نسخه ی اصلی موجودیت مورد نظر فراخوانی کنید، مقادیر موجودیت را بروز رسانی کرده، سپس متد SaveChanges را صدا بزنید.

HTML  و کد Razor موجود در فایل Views\Student\Edit.cshtml مشابه آن کدی است که در فایل Create.cshtmlمشاهده کردید، بنابراین لزومی به ایجاد تغییر نیست.

با انتخاب تب Students و کلیک بر روی لینک Edit، صفحه را اجرا کنید.

 

 

image

 

 

برخی از اطلاعات را تغییر داده و دکمه ی Save را کلیک کنید. داده های اصلاح شده را در صفحه ی Index مشاهده می کنید:

 

 

image

 

 

بروز رسانی صفحه ی Delete

داخل فایل Controllers\StudentController.cs ، کد template متعلق به متد HttpGet Delete با استفاده از متد Findموجودیت Student انتخابی را بازیابی می کند (همانگونه که در متدهای Details و Edit نظاره گر آن بودید). اما به منظور پیاده سازی یک پیام خطای سفارشی به هنگام ناموفق بودن فراخوانی متد SaveChanges، لازم است یک قابلیت جدید به این متد و view متناظر آن اضافه کنید.

همان طور که در عملیات update و create مشاهده کردید، عملیات delete به دو action method نیاز دارد. متدی که در پاسخ درخواست GET فراخوانده می شود، یک view نمایش می دهد که به کاربر این فرصت را می دهد که عملیات مربوطه را پذیرفته یا لغو کند. اگر کاربر با عملیات موافقت کرده و آن را پذیرفت، یک درخواست POST شکل می گیرد (ایجاد می شود). پس از این اتفاق، متد HttpPost Delete صدا زده می شود، سپس متد مزبور عملیات delete را به طور واقعی پیاده می کند.

یک قطعه کد try-catch به متد HttpPost Delete اضافه می کنیم تا در صورت رویداد خطا حین بروز رسانی پایگاه داده، بتوان آن ها را مدیریت کرد. اگر خطایی رخ داد، HttpPost Delete متد HttpGet Delete را فرا خوانده و پارامتری به آن ارسال می کند که نشانگر رخداد خطا می باشد. متد HttpGet Delete صفحه ی تایید را بار دیگر همراه با پیام خطا به نمایش می گذارد که به کاربر فرصت می دهد عملیات را لغو کرده یا مجددا امتحان کند.

1.     کد زیر را جایگزین اکشن متد HttpGet Delete کنید، این کد گزارش خطا را مدیریت می کند:

       public ActionResult Delete(int? id, bool? saveChangesError=false)

{

    if (id == null)

    {

        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);

    }

    

    

    

    Student student = db.Students.Find(id);

    if (student == null)

    {

        return HttpNotFound();

    }

    return View(student);

}

 

  .1این کد یک پارامتر اختیاری می پذیرد که مشخص می کند آیا متد پس از ناموفق بودن ذخیره سازی تغییرات صدا زده شده یا خیر. هنگامی که متد HttpGet Delete بدون شکست قبلی فراخواند می شود، این پارامتر false خواهد بود. حال اگر توسط متد HttpPost Delete در پاسخ به یک خطای پایگاه داده صدا زده شود، در آن صورت پارامتر true خواهد بود و یک پیام خطا به view ارسال می شود.

2.     اکشن متد HttpPost Delete (نام گذاری شده DeleteConfirmed) را با کد زیر جایگزین کنید، کار آن اجرای عملیات حذف و ضبط خطاهای مربوط به بروز رسانی پایگاه داده می باشد.

[HttpPost]

[ValidateAntiForgeryToken]

public ActionResult Delete(int id)

{

    try

    {

        Student student = db.Students.Find(id);

        db.Students.Remove(student);

        db.SaveChanges();

    }

    catch (DataException/* dex */)

    {

        //Log the error (uncomment dex variable name and add a line here to write a log.

        return RedirectToAction("Delete", new { id = id, saveChangesError = true });

    }

    return RedirectToAction("Index");

}

این کد موجودیت انتخابی را بازیابی کرده، سپس با فراخوانی متد Remove، وضعیت موجودیت را به Deleted تغییر می دهد. هنگامی که متد SaveChanges صدا زده می شود، یک دستور SQL DELETE صادر می شود. اسم اکشن متد را ازDeleteConfirmed به Delete تغییر دادیم. کد ایجاد شده توسط امکان scaffolding، متد HttpPost Delete راDeleteConfirmed نام گذاری کرده تا بتواند به متد HttpPost  امضای (signature) منحصربفرد اختصاص دهد. (CLRایجاب می کند که متدهای overload شده دارای پارامترهای متفاوتی باشند.) حال که امضای متدها منحصر بفرد می باشد، می توانید با روال عادی MVC پیش رفته و اسم یکسان را برای متدهای HttpPost و HttpGet بکار ببرید.

اگر افزایش کارایی در برنامه ی بزرگ و پرحجم یک اولویت محسوب می شود، می توانید با جایگزین کردن کد زیر با خط کدهایی که توابع Find و Remove را صدا می زند، از استفاده از یک دستور غیرالزامی SQL query که سطر مورد نظر را بازیابی می کند، خودداری نمایید و درنهایت سرعت اجرا را بالا ببرید:

        Student studentToDelete = new Student() { ID = id };

db.Entry(studentToDelete).State = EntityState.Deleted;

این کد تنها با استفاده از مقدار primary key، یک موجودیت Student نمونه سازی می کند، سپس وضعیت entity را بهDeleted تغییر دهید. این تمام آن چیزی است که EF نیاز دارد تا موجودیت مورد نظر را به وسیله ی آن حذف کند. 

همان طور که پیش تر گفته شد، متد HttpGet Delete، داده ها را حذف نمی کند. اجرای عملیات delete در پاسخ به یک درخواست GET (و اجرای عملیات edit، create و یا هر گونه عملیاتی که طی آن اطلاعات تغییر می کنند) باعث ایجاد یک خطر امنیتی می شود.

3. در فایل Views\Student\Delete.cshtml، یک پیام خطا بین سرتیترهای h2 و h3 درج نمایید، همان گونه که در نمونه ی زیر نمایش داده شده است:

      <h2>Delete</h2>

<p class="error">@ViewBag.ErrorMessage</p>

<h3>Are you sure you want to delete this?</h3>

با انتخاب تب Students و کلیک بر روی لینک Delete، صفحه را اجرا کنید:

 

 

image

 

 

4. بر روی Delete کلیک کنید. صفحه ی Index بدون دانشجوی (student) حذف شده، نمایش داده می شود.

بستن اتصال به پایگاه داده

به منظور بستن اتصال به پایگاه داده و آزاد ساختن منابعی که توسط آن بکار گرفته شده، بایستی نمونه ی context را بلافاصله بعد از اینکه کارتان با آن تمام شد، آزاد (dispose) کنید. به این خاطر هم است که کد تولید شده توسط امکانscaffolding یک متد Dispose در انتهای کلاس StudentController داخل فایل StudentController.cs فراهم می کند:

protected override void Dispose(bool disposing)

{

    db.Dispose();

    base.Dispose(disposing);

}

کلاس پایه ی Controller از پیش و به صورت پیش فرض رابط (interface Idisposableرا پیاده سازی می کند، این کد صرفا یک override به متد Dispose(bool) اضافه می کند تا نمونه ی context را به طور صریح آزاد کند.

مدیریت تراکنش ها (Handling Transactions)

به صورت پیش فرض، EF خود تراکنش ها را پیاده سازی می کند. در شرایطی که به طور همزمان چندین سطر یا جدول را تغییر می دهید سپس SaveChanges را فراخوانی می کنید، EF به صورت خودکار کاری می کند که یا تمام تغییرات با موفقیت انجام شوند و یا هیچ یک از آن ها اعمال نشوند. چنانچه اول برخی از تغییرات انجام شوند ولی بلافاصله با خطا مواجه گردند، کلیه ی آن تغییرات اعمال شده به صورت اتوماتیک به حالت اول باز خواهد گشت.

سه شنبه 19 آبان 1394  7:46 AM
تشکرات از این پست
mtk_designer
mtk_designer
کاربر برنزی
تاریخ عضویت : آذر 1390 
تعداد پست ها : 157

آموزش ASP.NET-مفهوم Razor

 چیست؟

  • Razor گرامری است برای افزودن کد های سمت سرور به WebPage.
  • Razor قدرت نشانه گذاری ASP.NET سنتی را دارد، با این تفاوت که Razor را راحت تر می آموزیم و راحت تر به کار می بریم.
  • Razor گرامر نشانه گذاری سمت سرور است که بیشتر مشابه PHP و ASP می باشد.
  • Razor زبان های برنامه نویسی Visual Basic و #C را پشتیبانی می کند.

افزودن کدهای Razor

صفحه وب درس قبلی را به یاد آورید:

<!DOCTYPE html>

<html lang="en">
<head>
   <meta charset="utf-8" />
    <title>Web Pages Demo</title>
</head>
<body>
    <h1>Hello Web Pages</h1>
</body>
</html>

حال چند خط کد Razor به آن اضافه می کنیم:

مثال

<!DOCTYPE html>

<html lang="en">
<head>
     <meta charset="utf-8" />
     <title>Web Pages Demo</title>
</head>
<body>
     <h1>Hello Web Pages</h1>
     <p>The time is @DateTime.Now</p>
</body>
</html>

خروجی کد بالا:

Hello Web Pages

The time is 1/14/2014 6:10:38 AM

این صفحه، شامل نشانه گذاری HTML است به علاوه یک مورد اضافه تر: کد Razorِ که با @ نشانه گذاری شده است.

کد Razor زمان فعلی سرور را به دست می آورد و آن را نمایش می دهد. (می توانید گزینه های مربوط به فرمت را مشخص نمایید، یا می توانید با فرمت پیش فرض آن را نمایش دهید)


قوانین اصلی گرامر Razor برای #C

  •  بلوک کد Razor در {....}@ محصور گردیده است.
  • عبارت های Inline (توابع و متغیرها) با @ شروع می شوند.
  • خط کدها با نقطه ویرگول خاتمه می یابند.
  • متغیرها با استفاده از کلمه کلیدی var تعریف می شوند.
  • رشته ها با علامت " محصور می شوند.
  • کدهای #C حساس به حروف بزرگ و کوچک هستند.
  • فایل های #C دارای پسوند cshtml. هستند.

#C مثال

<!-- Single statement block -->
@{ var myMessage = "Hello World"; }

<!-- Inline expression or variable -->
<p>The value of myMessage is: @myMessage</p>

<!-- Multi-statement block -->
@{
var greeting = "Welcome to our site!";
var weekDay = DateTime.Now.DayOfWeek;
var greetingMessage = greeting + " Today is: " + weekDay;
}

<p>The greeting is: @greetingMessage</p>

خروجی کد بالا:

The value of myMessage is: Hello World

The greeting is: Welcome to our site! Here in Huston it is: Tuesday


قوانین اصلی گرامر Razor برای VB

  •  بلوک کد Razor در Code  ... End@ محصور گردیده است.
  • عبارت های Inline (توابع و متغیرها) با @ شروع می شوند.
  • متغیرها با استفاده از کلمه کلیدی Dim تعریف می شوند.
  • رشته ها با علامت " محصور می شوند.
  • کدهای VB حساس به حروف بزرگ و کوچک نیستند.
  • فایل های VB دارای پسوند vbhtml. هستند.

مثال

<!-- Single statement block  --> 
@Code dim myMessage = "Hello World" End Code
 
<!-- Inline expression or variable --> 
<p>The value of myMessage is: @myMessage</p> 
 
<!-- Multi-statement block --> 
@Code
dim greeting = "Welcome to our site!" 
dim weekDay = DateTime.Now.DayOfWeek 
dim greetingMessage = greeting & " Today is: " & weekDay
End Code


<p>The greeting is: @greetingMessage</p>

خروجی کد بالا:

The value of myMessage is: Hello World

The greeting is: Welcome to our site! Here in Huston it is: Tuesday

 

پنج شنبه 28 آبان 1394  7:45 AM
تشکرات از این پست
mtk_designer
mtk_designer
کاربر برنزی
تاریخ عضویت : آذر 1390 
تعداد پست ها : 157

آموزش ASP.NET-مفهوم Layout

با استفاده از WebPage، خلق وبسایت با طرحی ثابت، راحت است.


نمای ثابت

در اینترنت، وبسایت های زیادی را با نمای ثابت می توانید پیدا کنید:

  • صفحات، header مشابهی دارند.
  • صفحات، footer مشابهی دارند.
  • صفحات، از استایل و قالب مشابهی پیروی می کنند.

با استفاده از WebPage، ایجاد نمای ثابت می تواند به صورت موثر انجام شود. بلوک های محتوا(content block)، مانند header و footer، می توانند به صورت فایل های مجزا باشند تا بتوان آن ها را در سایر صفحات استفاده کرد.

شما می توانید به علاوه یک طرح پایدار را برای تمام صفحات خود، با استفاده از طرح قالب تعریف کنید.


بلوک های محتوا

اکثر وب سایت ها شامل محتوایی هستند که در تمام صفحات نمایش داده می شود (مانند header و footer).

در WebPageها، می توانید با استفاده از متد (RenderPage@) محتوایی را از فایل های مجزا وارد صفحات نمایید.

بلوک محتوا (از فایل دیگر) می تواند در هر جای صفحه وب وارد شود، و می تواند همانند هر صفحه وب معمول حاوی متن، کد و ... باشد.

با استفاده از header و footer به عنوان مثال، در کارهایی که شما باید انجام دهید صرفه جویی می شود. شما مجبور نیستید به ازای هر صفحه محتوای مشابه را یک بار بنویسید، و مهمتر اینکه هنگام تغییر فایل های header و footer، محتوا در تمام صفحات به روز می شود.

تکه کد زیر چگونگی استفاده از RenderPage را نمایش می دهد.

مثال

<html>
<body>
@RenderPage("header.cshtml")
<h1>Hello Web Pages</h1>
<p>This is a paragraph</p>
@RenderPage("footer.cshtml")
</body>
</html>

خروجی کد بالا:

This is a header from a separate file

Hello Web Pages

This is a paragraph

This is a footer from a separate file


استفاده از صفحه Layout

در قسمت قبل، ملاحظه فرمودید که استفاده از محتوای مشابه در صفحات کار ساده ای است.

رهیافت دیگری که برای ایجاد نمای ثابت می تواند به کار گرفته شود استفاده از صفحه layout است. صفحه layout شامل ساختار، و نه محتوای WebPage است. هنگامی که یک صفحه وب (صفحه محتوا) به صفحه layout لینک می شود، بر اساس صفحه layout (قالب) نمایش داده می شود.

صفحه layout نیز مانند یک صفحه وب معمولی است، با یک تفاوت جزیی. و آن تفاوت، فراخوانی متد ()RenderBody@ می باشد که در آن صفحه محتوا قرار می گیرد.

هر صفحه محتوا باید با یک Layout directive شروع شود.

تکه کد زیر آن چه را شرح دادیم نمایش می دهد.

صفحه Layout:

<html>
<body>
<p>This is header text</p>
@RenderBody()
<p>&copy; 2013 Beyamooz. All rights reserved.</p>
</body>
</html>

 

سایر صفحات:

@{Layout="Layout.cshtml";}

<h1>Welcome to Beyamooz</h1>

<p>
Lorem ipsum dolor sit amet, consectetur adipisicing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laborisnisi ut aliquip ex ea commodo consequat.
</p>

خروجی کد بالا:

This is header text

Welcome to Beyamooz

Lorem ipsum dolor sit amet, consectetur adipisicing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.Ut enim ad minim veniam, quis nostrud exercitation ullamco laborisnisi ut aliquip ex  ea commodo consequat. Duis aute irure dolor inreprehenderit in voluptate velit esse cillum dolore eu fugiat  nullapariatur. Excepteur sint occaecat cupidatat non proident, sunt inculpa qui officia deserunt mollit anim id est laborum.

© 2013 Beyamooz. All rights reserved.


D.R.Y. - Don't Repeat Yourself

با استفاده از دو ابزار ASP.NET، یکی بلوک محتوا و دیگری صفحات Layout، می توانید به برنامه های کاربردی وب، نمای ثابت بدهید.

این ابزارها همچنین کار شما را کمتر می کند، زیرا شما نیاز ندارید تا اطلاعات مشابه را در صفحات خود تکرار کنید. متمرکز ساختن نشانه گذاری ها، استایل و کد، مدیریت و نگهداری برنامه های کاربردی وب را سهل الوصول می کند.


ممانعت از اینکه فایل ها مشاهده شوند

با استفاده از ASP.NET، فایلهایی که نام آن ها با یک (_) (زیر خط) آغاز می شوند، در وب مرور نمی شوند اگر نمی خواهید بلوک محتوایتان یا فایل های layout شما توسط کاربران مشاهده گردد، فایل ها را مانند زیر نامگذاری کنید:

header.cshtm_

footer.cshtml_

Layout.cshtml_


 مخفی کردن اطلاعات حساس

در ASP.NET، روش معمول برای مخفی کردن اطلاعات حساس (مانند رمز های عبور پایگاه داده، رمزهای پست الکترونیکی و غیره) نگهداری این اطلاعات در فایل مجزایی با نام AppStart_ است.

_AppStart.cshtml

@{
WebMail.SmtpServer = "mailserver.example.com";
WebMail.EnableSsl = true;
WebMail.UserName = "username@example.com";
WebMail.Password = "your-password";
WebMail.From = "your-name-here@example.com";
}

 

پنج شنبه 28 آبان 1394  7:46 AM
تشکرات از این پست
mtk_designer
mtk_designer
کاربر برنزی
تاریخ عضویت : آذر 1390 
تعداد پست ها : 157

آموزش ASP.NET-فولدرها

این درس در رابطه با فولدرها و مسیرهای مربوط فولدر می باشد.


آن چه در این بیاموز خواهید آموخت:

  • ساختارهای فیزیکی  و منطقی فولدر
  • نام های فیزیکی و مجازی
  • مسیرها و URL های وب

ساختار منطقی فولدر

در شکل زیر ساختار فولدرها در ASP.NET WebPage را ملاحظه می فرمایید:

  • فولدر "Account" حاوی فایل های logon و security  است.
  • فولد "App_Data" حاوی فایل های داده و پایگاه داده است.
  • فولدر "Images" حاوی تصاویر است.
  • فولدر "Scripts" حاوی اسکریپت های مرورگر است.
  • فولدر "Shared" حاوی فایل های مشترک (از قبیل فایل های Layout و استایل) است.

ساختار فیزیکی فولدر

ساختار فیزیکی برای فولدر "Images" در وب سایت بالا ممکن است روی یک کامپیوتر مانند زیر باشد:

C:\Johnny\Documents\MyWebSites\Demo\Images


نام های فیزیکی و مجازی

برای مثال بالا:

نام مجازی یک تصویر ممکن است به صورت "Images/pic31.jpg" باشد.

اما نام فیزیکی به صورت "C:\Johnny\Documents\MyWebSites\Demo\Images\pic31.jpg" می باشد.


URLs and Paths URL ها و مسیرها

URL هایی که برای دسترسی به فایل ها استفاده می شود به صورت زیر است:

http://www.famaco.ir/Home.aspx

این URL منطبق با فایل فیزیکی زیر روی سرور است:

C:\MyWebSites\Famaco\Home.aspx

مسیر مجازی، مسیرهای کوتاهی است که برای نمایش مسیرهای فیزیکی به کار می رود. اگر از مسیرهای مجازی استفاده کنید، می توانید صفحات خود را روی دامنه متفاوتی بدون به روز کردن مسیر، انتقال دهید.

URL http://www.famaco.ir/Home.aspx
Server name Famaco
Virtual path Home.aspx/
Physical path C:\MyWebSites\Famaco\Home.aspx

ریشه روی دیسک درایو به صورت \:C نوشته می شود، اما در وبسایت ها ریشه، / (علامت خط مورب) می باشد.

مسیر مجازی یک فولدر وب تقریبا اغلب اوقات مشابه مسیر فیزیکی فولدر نمی باشد.

در کدتان، بسته به اینکه چه چیزی را دارید کد می زنید، به هر دوی مسیر فیزیکی و مسیر مجازی ارجاع خواهید داد.

ASP.NET دارای سه ابزار برای کار با مسیر فولدرهاست:

  • عملگر ~
  • متد Server.MapPath
  • و متد Href

عملگر ~

برای مشخص کردن مسیر مجازی در کد برنامه، از عملگر ~ استفاده نمایید.

اگر از عملگر ~ به جای مسیر استفاده کردید، می توانید وب سایت خود را به فولدر دیگری بدون تغییر در کدتان، انتقال دهید.

var myImagesFolder = "~/images";
var myStyleSheet = "~/styles/StyleSheet.css";

متد Server.MapPath

متد Server.MapPath یک مسیر مجازی مانند (default.cshtml/) را به یک مسیر فیزیکی که برای سرور قابل فهم است تبدیل می کند. (C:\Johnny\MyWebSited\Demo\default.cshtml).

با استفاده از این متد می توانید فایل های روی سرور را باز کنید. (فایل هایی که تنها با استفاده از مسیر فیزیکی قابل دستیابی هستند):

var pathName = "~/dataFile.txt";
var fileName = Server.MapPath(pathName);

در بیاموزهای بعدی، درباره خواندن (یا نوشتن) از روی فایلهای روی سرور خواهید آموخت.


متد Href

متد Href مسیری که در کد استفاده شده است را به مسیری که برای مرورگر قابل فهم باشد تبدیل می کند. (مرورگر عملگر ~ را نمی شناسد)

از متد Href برای ایجاد مسیرهای فایل های تصاویر و CSS که به عنوان فایل منبع شناخته می شوند، استفاده می کنیم.

شما اغلب از این متد در تگ های Html مانند <a>، <img> و <link> استفاده می کنید:

@{var myStyleSheet = "~/Shared/Site.css";}

<!-- This creates a link to the CSS file. -->
<link rel="stylesheet" type="text/css" href="/@Href(myStyleSheet)" />

<!-- Same as : -->
<link rel="stylesheet" type="text/css" href="/Shared/Site.css" />

متد Href یک متد از شی WebPage است.

پنج شنبه 28 آبان 1394  7:47 AM
تشکرات از این پست
mtk_designer
mtk_designer
کاربر برنزی
تاریخ عضویت : آذر 1390 
تعداد پست ها : 157

آموزش ASP.NET-مفهوم Global

قبل از شروع کار وب: AppStart_

اکثر کدهای سمت سرور، داخل WebPage نوشته می شود. برای مثال، اگر یک صفحه، حاوی یک فرم ورودی باشد، در این صفحه معمولا کدهای سمت سرور مربوط به خواندن داده های فرم نیز وجود دارد.

با این وجود با ایجاد صفحه ای با عنوان AppStart_ در ریشه سایت خود، می توانید کدهایی را قبل از اینکه سایت شروع به کار کند، اجرا نمایید. اگر چنین صفحه ای وجود داشت، ASP.NET کدهای داخل آن را هر بار که صفحه ای برای اولین بار درخواست می شود، اجرا می کند.

استفاده رایج AppStart_، کدهای startup و مقدار دهی اولیه مقادیر سراسری مانند شمارنده ها و نام های سراسری می باشد.

نکته 1: پسوند فایل AppStart باید مانند پسوند WebPage تان باشد، مانند:AppStat.cshtml_

نکته 2: در ابتدای نام AppStart_ یک (_) وجود دارد، که باعث می شود App_Start_ مستقیما مشاهده نشود.


قبل از هر صفحه ای: PageStart_

دقیقا همانند AppStart_ که قبل از شروع سایت تان اجرا می شود، می توانید کدهایی بنویسی که قبل از اینکه صفحات داخل یک فولدر خاص اجرا شوند، این کدها اجرا شود.

به ازای هر فولدر در وب خود، می توانید یک فایل با نام PageStart_ اضافه کنید.

استفاده رایج PageStart_، تنظیم صفحه Layout برای تمام صفحات داخل فولدر ، و بررسی ورود کاربر قبل از اجرای صفحه، می باشد.


نحوه انجام کار

دیاگرام زیر چگونگی کار را نمایش می دهد:

هنگامی که درخواست وارد می شود، ASP.NET بررسی می کند که آیا App_Start وجود دارد یا خیر، اگر وجود دارد، و این اولین درخواست سایت است، AppStart_ اجرا می شود.

سپس ASP.NET بررسی می کند که آیا PageStart_ وجود دارد یا خیر، در صورت وجود، PageStart_ قبل از اینکه صفحه درخواست شود، اجرا می شود.

با استفاده از فراخوانی متد ()RunPage داخل PageStart_ می توانید مشخص کنید کجا صفحه درخواستی اجرا شود. در غیر این صورت، PageStart_ قبل از شروع صفحه درخواست شده اجرا می شود.

پنج شنبه 28 آبان 1394  7:47 AM
تشکرات از این پست
mtk_designer
mtk_designer
کاربر برنزی
تاریخ عضویت : آذر 1390 
تعداد پست ها : 157

اموزش ASP.NET-مفهوم Form

یک فرم، بخشی از یک سند HTML است که شما کنترل های ورودی (text box ها، check box ها، دکمه های رادیویی، و لیست های پایین افتادنی) را درون آن قرار می دهید.


ایجاد صفحات ورودی HTML

Razor مثال

<html>
<body> 
@{
if (IsPost) { 
string companyname = Request["companyname"]; 
string contactname = Request["contactname"]; 

<p>You entered: <br />
Company Name: @companyname <br />
Contact Name: @contactname </p>
}
else
{

<form method="post" action="">
Company Name:<br />
<input type="text" name="CompanyName" value="" /><br />
Contact Name:<br />
<input type="text" name="ContactName" value="" /><br /><br />
<input type="submit" value="Submit" class="submit" />
</form>
}
} 
</body> 
</html>

خروجی کد بالا:

  Company Name:

Contact Name:

 
 

مثال Razor- نمایش تصاویر

تصور نمایید در فولدر تصاویرتان سه عکس موجود است، و شما قصد دارید هنگامی که کاربر هر کدام از عکس ها را  انتخاب کرد، عکس مورد نظر به صورت پویا نمایش داده شود.

این کار به راحتی با استفاده از Razor انجام می شود.

اگر تصویری با نام "Photo1.jpg" در فولدر تصاویر وب سایت تان داشتید، می توانید با استفاده از تگ <img> در HTML آن را نمایش دهید:

<img src="/images/Photo1.jpg" alt="Sample" />

کد زیر نحوه نمایش تصویری که کاربر از یک لیست پایین افتادنی انتخاب می کند، را نمایش می دهد:

Razor مثال

@{
var imagePath="";
if (Request["Choice"] != null)
   {imagePath="images/" + Request["Choice"];}
}

<!DOCTYPE html>
<html>
<body>
<h1>Display Images</h1>
<form method="post" action="">
I want to see:
<select name="Choice">
  <option value="Photo1.jpg">Photo 1</option>
  <option value="Photo2.jpg">Photo 2</option>
  <option value="Photo3.jpg">Photo 3</option>
</select>
<input type="submit" value="Submit" />
@if (imagePath != "")
{

<p>
<img src="/@imagePath" alt="Sample" />
</p>
} 
</form>
</body>
</html>

خروجی کد بالا:

Display Images

I want to see:

 

 

شرح مثال

سرور متغیر imagePath را نمایش می دهد.

با استفاده از این لیست کاربر نام تصویر مورد نظر خود را انتخاب می نماید، هنگامی که او روی دکمه Submit کلیک می کند، نام فایل انتخابی (مثلا Photo1.jpg) به سرور ارسال می گردد.

کد Razor مقدار Choice را با استفاده از دستور ["Request["Choice می خواند. اگر مقدار وجود داشت، کد مسیر تصویر (images/photo1.jpg) را ایجاد می کند، و آن را در متغیر imagePath ذخیره می کند.

در این صفحه یک عنصر <img> برای نمایش تصویر وجود دارد. هنگامی که صفحه نمایش داده می شود خصوصیت src با استفاده از متغیر imagePath مقدار دهی می شود.

تگ <img> در شرط if قرار گرفته است تا از نمایش تصویر بدون نام جلوگیری کند (مانند اولین باری که صفحه نمایش داده می شود).

پنج شنبه 28 آبان 1394  7:48 AM
تشکرات از این پست
mtk_designer
mtk_designer
کاربر برنزی
تاریخ عضویت : آذر 1390 
تعداد پست ها : 157

آموزش ASP.NET-مفهوم اشیاء

شیء Page

شما در عمل تاکنون چندین متد شیء Page را دیده اید:

@RenderPage("header.cshtml")

@RenderBody()

در بیاموز قبلی دو ویژگی از اشیاء صفحه را ملاحظه فرمودید (isPost، و Request):

If (isPost) {

if (Request["Choice"] != null) {

تعدادی از متدهای شیء Page

Method Description
href  URLی را با استفاده از پارامترهای مشخص ایجاد می کند.
RenderBody()

قسمتی از صفحه را که در layout اصلی ذکر نشده است را از مکان دیگر render می کند. (در صفحات layout)

RenderPage(page) محتوای صفحه ای را با استفاده از صفحه دیگری render می کند.
RenderSection(section) محتوای Section یا بخشی را در صفحه layout رندر می کند.
Write(object) شیء را به صورت یک رشته HTML-enoded می نویسد.

برخی از ویژگی های شیء Page

Property Description
isPost در صورتی که روش انتقال داده HTTP متد POST باشد true برمی گرداند.
Layout آدرس مربوط به صفحه layout را مقداردهی و یا مقدار آن را بر می گرداند.
Page دستیابی به داده های مشترک بین صفحات معمولی و صفحات layout را فراهم می کند.
Request شیء HttpRequest را برای درخواست HTTP فعلی برمی گرداند.
Server شیء HttpServerUtility را برمی گرداند که متدهای پردازش صفحه وب را فراهم می کند.

 خاصیت Page ( از شیء Page)

خاصیت Page از شیء Page، دستیابی به داده های مشترک بین صفحات معمولی و صفحات layout را فراهم می کند.

می توانید ویژگی های خود را به خاصیت Page اضافه کنید:

  • Page.Title
  • Page.Version
  • Page.anythingyoulike

ویژگی Page بسیار پرکاربرد است. برای نمونه، می توان با استفاده از این ویژگی عنوان صفحه را در فایلهای محتوا تنظیم کرد، و آن را در فایل layout استفاده کرد.

Home.cshtml

@{
Layout="~/Shared/Layout.cshtml";
Page.Title="Home Page"
}


<h1>Welcome to Beyamooz</h1>

<h2>Web Site Main Ingredients</h2>

<p>A Home Page (Default.cshtml)</p>
<p>A Layout File (Layout.cshtml)</p>
<p>A Style Sheet (Site.css)</p>

Layout.cshtml

<!DOCTYPE html>
<html>
<head>
<title>@Page.Title</title>
</head>
<body>
@RenderBody()
</body>
</html

 

پنج شنبه 28 آبان 1394  7:48 AM
تشکرات از این پست
mtk_designer
mtk_designer
کاربر برنزی
تاریخ عضویت : آذر 1390 
تعداد پست ها : 157

آموزش ASP.NET-پایگاه داده

این بیاموز به کار با پایگاه داده پرداخته است.


هدف مان چیست؟ 

در این بیاموز قصد داریم:

  • یک صفحه وب برای لیست کردن داده های پایگاه داده ایجاد کنیم.

 نمایش اطلاعات پایگاه داده

با استفاده از WebPage، به سادگی می توانید، داده هایی را از پایگاه داده خوانده و نمایش دهید.

شما می توانید به پایگاه داده موجود متصل شوید، و یا یک پایگاه داده ایجاد نمایید.

در این مثال قصد داریم که به یک پایگاه داده فشرده SQL موجود، متصل شویم.


اضافه کردن صفحه مشتریان

در فولدر "DemoWebPages"، فایل CSHTMLی با نام  "Products.cshtml" ایجاد نمایید.

کدهایی که در زیر آمده را با کدهای فایل ایجاد شده جابه جا نمایید.

Products.cshtml

@{
var db = Database.Open("SmallBakery"); 
var selectQueryString = "SELECT * FROM Product ORDER BY Name"; 
}

<html> 
<body> 
<h1>Small Bakery Products</h1> 
<table> 
<tr>
<th>Id</th> 
<th>Product</th> 
<th>Description</th> 
<th>Price</th> 
</tr>
@foreach(var row in db.Query(selectQueryString))
{

<tr> 
<td>@row.Id</td> 
<td>@row.Name</td> 
<td>@row.Description</td> 
<td align="right">@row.Price</td> 
</tr> 
}
</table> 
</body> 
</html>

خروجی کد بالا:

Small Bakery Products

Id Product Description Price
1 Bread Baked fresh every day 2.99
2 Strawberry Cake Made with organic strawberries 9.99
3 Apple Pie Second only to your mom's pie 12.99
4 Pecan Pie If you like pecans, this is for you 10.99
5 Lemon Pie Made with the best lemons in the world 11.99
6 Cupcakes Your kids will love these 9.99

توضیح مثال

متد( Database.Open(name طی دو مرحله به پایگاه داده متصل می شود.

ابتدا، داخل فولدر App_Data را برای یافتن پایگاه دادهای که با پارامتر name همنام است، جستجو می کند.

اگر هیچ فایلی یافت نشد، به سراغ رشته اتصال "connection string" در فایل Web.config می رود.

رشته اتصال حاوی اطلاعاتی از قبیل چگونگی اتصال به پایگاه داده است، ( این رشته می تواند شامل مسیر فایل، یا نام پایگاه داده، نام کاربری و کلمه عبور باشد.)

پنج شنبه 28 آبان 1394  7:50 AM
تشکرات از این پست
mtk_designer
mtk_designer
کاربر برنزی
تاریخ عضویت : آذر 1390 
تعداد پست ها : 157

آموزش ASP.NET-مفهوم فایل

کار با فایل های متنی

در بیاموز قبلی، به داده های وبی که در پایگاه داده ذخیره شده بود، پرداختیم.

سایت شما ممکن است دارای اطلاعاتی باشد که در فایل های متنی ذخیره شده است.

فایل های متنی که برای ذخیره داده به کار می روند معمولا فایل های flat نامیده می شوند. فرمت های فایل مرسوم عبارتند از txt. و xml. و csv. یا (comma-delimited values).

در این بیاموز خواهید آموخت:

  • چگونه از فایل های متنی بخوانیم و داده های آن را نمایش دهیم.

افزودن دستی یک فایل متنی

در مثالی که در ادامه می آید، لازم است یک فایل متنی که بنا است در وب سایت خود داشته باشید، اگر فولدر App_Data را در پروژه خود ندارید، یک فولدر با این نام ایجاد فرمایید. در فولدر App_Data، فایل جدید با نام Persons.txt ایجاد کنید.

محتوای زیر را به فایل خود اضافه نمایید:

Persons.txt

George,Lucas
Steven,Spielberg
Alfred,Hitchcock

نمایش داده های یک فایل متنی 

مثال زیر نحوه نمایش اطلاعات یک فایل متنی را نشان می دهد:

مثال

@{
var dataFile = Server.MapPath("~/App_Data/Persons.txt");
Array userData = File.ReadAllLines(dataFile);
}


<!DOCTYPE html>
<html>
<body>

<h1>Reading Data from a File</h1>
@foreach (string dataLine in userData)
{
  foreach (string dataItem in dataLine.Split(','))
  {@dataItem <text>&nbsp;</text>}

  <br />
}
</body>
</html>

خروجی کد بالا:

Reading Data from a File

George  Lucas  
Steven  Spielberg  
Alfred  Hitchcock

توضیح مثال

Server.MapPath مسیر دقیق فایل را می یابد.

File.ReadAllLines فایل متنی را باز می کند و تمام خطوط فایل را داخل آرایه واکشی می کند.

به ازای هر  عنصر در آرایه، داده های آن عنصر نمایش داده می شود.


 نمایش داده های یک فایل اکسل

با استفاده از مایکروسافت اکسل، می توانید یک صفحه گسترده را به عنوان یک فایل متنی که با کاما جدا گردیده اند، (فایل csv) ذخیره نمایید.

می توانید مثال بالا را برای خواندن از یک فایل اکسل csv. استفاده نمایید. ( تنها کافی است نام فایل را به نام فایل اکسل تغییر دهید)

پنج شنبه 28 آبان 1394  7:51 AM
تشکرات از این پست
mtk_designer
mtk_designer
کاربر برنزی
تاریخ عضویت : آذر 1390 
تعداد پست ها : 157

آموزش ASP.NET-مفهوم WebGrid

 ایجاد HTML  توسط خودتان

در بیاموزهای قبلی، ملاحظه فرمودید که چگونه می توان با استفاده از کد Razor، اطلاعات پایگاه داده را نمایش داد، و کدهای HTML را ایجاد کرد.

Database مثال

@{
var db = Database.Open("SmallBakery"); 
var selectQueryString = "SELECT * FROM Product ORDER BY Name"; 
}

<html> 
<body> 
<h1>Small Bakery Products</h1> 
<table> 
<tr>
<th>Id</th> 
<th>Product</th> 
<th>Description</th> 
<th>Price</th> 
</tr>
@foreach(var row in db.Query(selectQueryString))
{

<tr> 
<td>@row.Id</td> 
<td>@row.Name</td> 
<td>@row.Description</td> 
<td style="text-align:right">@row.Price</td> 
</tr> 
}
</table> 
</body> 
</html>

خروجی کد بالا:

Small Bakery Products

Id Product Description Price
1 Bread Baked fresh every day 2.99
2 Strawberry Cake Made with organic strawberries 9.99
3 Apple Pie Second only to your mom's pie 12.99
4 Pecan Pie If you like pecans, this is for you 10.99
5 Lemon Pie Made with the best lemons in the world 11.99
6 Cupcakes Your kids will love these 9.99

 استفاده از  WebGrid Helper

با استفاده از WebGrid Helper نمایش اطلاعات کاری بسیار ساده است.

WebGrid helper:

  • به طور اتوماتیک جدول HTML ی را برای نمایش اطلاعات تنظیم می کند.
  • گزینه های مختلفی را برای فرمت دهی پشتیبانی می کند.
  • صفحه بندی اطلاعات را پشتیبانی می کند.
  • مرتب سازی هر ستون را با کلیک روی نام آن ستون پشتیبانی می کند.

WebGrid مثال

@{ 
var db = Database.Open("SmallBakery") ; 
var selectQueryString = "SELECT * FROM Product ORDER BY Name"; 
var data = db.Query(selectQueryString); 
var grid = new WebGrid(data); 
}

<html> 
<head> 
<title>Displaying Data Using the WebGrid Helper</title> 
</head> 
<body> 
<h1>Small Bakery Products</h1> 
<div id="grid"> 
@grid.GetHtml()
</div> 
</body> 
</html>

خروجی کد بالا:

Small Bakery Products

Id Name Description Price
1 Bread Baked fresh every day 2,99
5 Cupcakes Your kids will love these 7,99
4 Lemon Pie Made with the best lemons in the world 11,99
3 Pecan Pie If you like pecans, this is for you 12,99
2 Strawberry Cake Made from organic strawberries 9,99

 

پنج شنبه 28 آبان 1394  7:56 AM
تشکرات از این پست
mtk_designer
mtk_designer
کاربر برنزی
تاریخ عضویت : آذر 1390 
تعداد پست ها : 157

آموزش ASP.NET-مفهوم Helper


ASP.NET Helpers

ASP.NET Helper ها کامپوننت هایی هستند که می توان با چند خط کد به آنها دست یافت.

می توانید helper هایی را برای خودتان با استفاده از سینتکس Razor در فایل های cshtml. بسازید، یا اینکه از ASP.NET Helper های آماده استفاده نمایید.

در درس بعدی این آموزش نحوه استفاده از Razor Helper ها را خواهید آموخت.

در زیر برخی از Razor helper های مفید به طور مختصر شرح داده شده اند:


WebGrid Helper

WebGrid Helper روش نمایش داده ها را ساده می کند:

  • به صورت خودکار جدول Html ی را برای نمایش داده ها ایجاد و تنظیم می کند.
  • گزینه های مختلفی را برای فرمت دهی پشتیبانی می کند.
  • از Paging صفحات (بعدی، قبلی، آخرین، اولین)  پشتیبانی می کند.
  • از مرتب سازی هر ستون با کلیک روی سرنام آن ستون پشتیبانی می کند.

Chart Helper

"Chart Helper" انواع چارت های مختلف را با استفاده از گزینه ها و برچسب های متعدد نمایش می دهد.

 

chart helper این قابلیت را دارد که اطلاعات را از آرایه، از پایگاه داده یا از فایل بخواند.


WebMail Helper

 WebMail helper توابعی را برای ارسال ایمیل با استفاده از پروتکل ( SMTP (Simple Male Transfer Protocol فراهم می کند.


WebImage Helper

WebImage helper ابزارهایی را برای مدیریت تصاویر وب در اختیار قرار می دهد.

کلید واژه ها: flip, rotate, resize, watermark


Third Party Helpers

با استفاده از Razor، می توانید از مزایای helper های آماده یا third party helper ها برای آسان کردن استفاده از ایمیل، پایگاه داده، چند رسانه ای، شبکه های اجتماعی و مسائل زیاد دیگری من جمله امنیت وب و غیره بهره ببرید.


نصب Helper

برخی از helper ها هم اکنون در WebMatrix قرار دارند، اما شما می توانید سایر helper ها را نیز نصب کیند.

اگر از WebMatrix برای ایجاد سایت استفاده می کنید، می توانید مراحل زیر را برای نصب helper ها انجام دهید:

  1. در WebMatrix، فضای کاری سایت را باز نمایید.
  2. روی Web Pages Administration کلیک نمایید.
  3. *با استفاده از رمز عبور به صفحات مدیریت بروید.
  4. با استفاده از search field به جستجوی helper ها بپردازید.
  5. روی install کلیک کنید تا helper مورد نظرتان نصب گردد.

(* اولین باری که از صفحات مدیریت استفاده می کنید، از شما درخواست می شود تا رمز عبوری را ایجاد کنید.)

پنج شنبه 28 آبان 1394  7:56 AM
تشکرات از این پست
mtk_designer
mtk_designer
کاربر برنزی
تاریخ عضویت : آذر 1390 
تعداد پست ها : 157

آموزش ASP.NET-مفهوم Chart


Chart Helper

در بیاموز های قبلی، در رابطه با چگونگی استفاده از Helper های ASP.NET آموختید.

آموختید که چگونه داده ها را داخل grid با استفاده از "WebGrid Helper" نمایش دهید.

این بیاموز شما را با چگونگی نمایش داده ها در قالب گرافیکی، با استفاده از "Chart Helper" آشنا می سازد.

با استفاده از "Chart Helper" می توان چارت هایی متفاوت با استفاده از گزینه های فرمت دهی و برچسب های متعدد ایجاد نمود. "Chart Helper" قادر است، چارت های استانداردی مانند چارت های سطحی، ستونی، خطی، قالبی، دایره ای، و حتی چارت های خاص تر مانند چارت های انباشته ایجاد نماید.

 chart

منبع داده هایی که شما در چارت نمایش می دهید می تواند آرایه، پایگاه داده یا داده های یک فایل باشد.


 چارت با استفاده از داده های آرایه

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

مثال

@{ 
var myChart = new Chart(width: 600, height: 400) 
   .AddTitle("Employees") 
   .AddSeries(chartType: "column",
      xValue: new[] {  "Peter", "Andrew", "Julie", "Mary", "Dave" }, 
      yValues: new[] { "2", "6", "4", "5", "3" }) 
   .Write();
}

خروجی کد بالا:

-  new Chart شیء چارت جدیدی را ایجاد و طول و عرض آن را تنظیم می کند.

- متد AddTitle عنوان چارت را مشخص می کند.

- متد AddSeries داده ها را به چارت اضافه می کند.

- پارامتر chartType نوع چارت را مشخص می کند.

- پارامتر xValue نامهای محور x را مشخص می کند.

- پارامتر yValues مقادیر محور y را مشخص می کند.

- متد ()Write چارت را نمایش می دهد.


چارت با استفاده از داده های پایگاه داده

شما می توانید یک پرس و جوی پایگاه داده را اجرا نمایید و سپس از داده های منتج از پرس و جو برای ایجاد چارت استفاده نمایید:

مثال

@{ 
var db = Database.Open("SmallBakery"); 
var dbdata = db.Query("SELECT Name, Price FROM Product"); 
var myChart = new Chart(width: 600, height: 400) 
   .AddTitle("Product Sales") 
   .DataBindTable(dataSource: dbdata, xField: "Name")
   .Write();
}

خروجی کد بالا:

- var db = Database.Open پایگاه داده را باز می کند ( و شیء پایگاه داده رابه متغیر db تخصیص می دهد)

- var dbdata = db.Query پرس و جوی پایگاه داده را اجرا می نماید و نتیجه را در dbdata ذخیره می کند.

- new Chart چارت جدیدی را ایجاد و طول و عرض آن را تنظیم می کند.

- متد AddTitle عنوان چارت را مشخص می کند.

- متد DataBindTable منبع داده (data source) را به چارت متصل می کند.

-متد ()Write چارت را نمایش می دهد.

 استفاده از متد AddSeries جایگزینی برای متد DataBindTable است. (مثال قبلی را ملاحظه فرمایید.)

استفاده از DataBindTable آسان تر است، اما AddSeries انعطاف پذیر تر است زیرا می توانید چارت و داده ها را صریح تر تعریف کنید:

مثال

@{ 
var db = Database.Open("SmallBakery"); 
var dbdata = db.Query("SELECT Name, Price FROM Product"); 
var myChart = new Chart(width: 600, height: 400) 
   .AddTitle("Product Sales") 
   .AddSeries(chartType:"Pie",
      xValue: dbdata, xField: "Name",
      yValues: dbdata, yFields: "Price")
   .Write();
}

خروجی کد بالا:


 چارت با استفاده از داده های XML

منبع داده سوم برای ایجاد چارت استفاه از فایل XML است:

مثال

@using System.Data;

@{
var dataSet = new DataSet();
dataSet.ReadXmlSchema(Server.MapPath("data.xsd"));
dataSet.ReadXml(Server.MapPath("data.xml"));
var dataView = new DataView(dataSet.Tables[0]);
var myChart = new Chart(width: 600, height: 400)
   .AddTitle("Sales Per Employee")
   .AddSeries("Default", chartType: "Pie",
      xValue: dataView, xField: "Name",
      yValues: dataView, yFields: "Sales")
   .Write();}
}

خروجی کد بالا:

 

پنج شنبه 28 آبان 1394  7:56 AM
تشکرات از این پست
mtk_designer
mtk_designer
کاربر برنزی
تاریخ عضویت : آذر 1390 
تعداد پست ها : 157

آموزش ASP.NET-ایمیل


WebMail Helper

WebMail Helper فرایند ارسال نامه از طریق برنامه کاربردی وب با استفاده از پروتکل SMTP را آسان می کند.


سناریو: پشتیبانی از رایانامه(ایمیل)

برای نمایش استفاده از رایانامه، یک صفحه ورودی برای پشتیبانی ورودی ایجاد می کنیم، و اجازه می دهیم کاربر صفحه را به صفحه دیگری ارسال کند، و یک رایانامه برای پشتیبانی مشکل ارسال کند.


 ابتدا: صفحه AppStart خود را ویرایش نمایید.

اگر برنامه کاربردی این بیاموز را تاکنون ایجاد کرده باشید، صفحه ای با عنوان AppStart.cshtml_ را با محتوای زیر هم اکنون در اختیار دارید:

_AppStart.cshtml

@{
WebSecurity.InitializeDatabaseConnection("Users", "UserProfile", "UserId", "Email", true);
}

برای راه اندازی کردن WebMail helper، ویژگی های WebMailی که در زیر آمده است را به صفحه AppStart خود اضافه نمایید:

_AppStart.cshtml

@{
WebSecurity.InitializeDatabaseConnection("Users", "UserProfile", "UserId", "Email", true);
WebMail.SmtpServer = "smtp.example.com";
WebMail.SmtpPort = 25;
WebMail.EnableSsl = false;
WebMail.UserName = "support@example.com";
WebMail.Password = "password-goes-here";
WebMail.From = "john@example.com";

}

شرح ویژگی ها:

SmtpServer:نام سرور SMTP است که قرار است استفاده شود تا رایانامه ها را ارسال کند.

SmtpPort: شماره پورتی است که سرور برای ارسال تراکنش های SMTP (رایانامه ها) استفاده خواهد کرد.

EnableSsl:True، اگر سرور می بایست از (SSL (Secure Socket Layer برای رمز نگاری استفاده کند.

UserName: نام کاربری حساب SMTP که برای ارسال رایانامه استفاده می شود.

Password: رمز عبور حساب SMTP است.

From: عنوان راانامه ای است که در آدرس نمایش داده می شود. (اغلب همان نام کاربری است)


مرحله دوم: یک صفحه ورودی رایانامه ایجاد کنید:

سپس یک صفحه ورودی ایجاد نمایید، و نام آن را Email_Input بگذارید:

Email_Input.cshtml

<!DOCTYPE html>
<html>
<body>
<h1>Request for Assistance</h1>

<form method="post" action="Email_Send.cshtml">
<label>Username:</label>
<input type="text name="customerEmail" />
<label>Details about the problem:</label>
<textarea name="customerRequest" cols="45" rows="4"></textarea>
<p><input type="submit" value="Submit" /></p>
</form>

</body>
</html>

هدف از صفحه ورودی، جمع آوری اطلاعات و سپس ارسال داده ها به صفحه دیگر است که این صفحه می تواند اطلاعات را به عنوان رایانامه بفرستد.


مرحله سوم: یک صفحه ارسال رایانامه ایجاد نمایید.

سپس صفحه ای ایجاد نمایید که برای ارسال رایانامه استفاده می شود. نام این صفحه را Email_Send بگذارید.

Email_Send.cshtml

@{ // Read input
var customerEmail = Request["customerEmail"];
var customerRequest = Request["customerRequest"];
try
{
// Send email
WebMail.Send(to:"someone@example.com", subject: "Help request from - " + customerEmail, body: customerRequest );
}
catch (Exception ex )
{
<text>@ex</text>
}
}

 

پنج شنبه 28 آبان 1394  7:57 AM
تشکرات از این پست
mtk_designer
mtk_designer
کاربر برنزی
تاریخ عضویت : آذر 1390 
تعداد پست ها : 157

آموزش ASP.NET-بکارگیری PHP

قابل توجه توسعه دهندگان PHP، می توان WebPageها را  با PHP نوشت.


WebMatrix از PHP پشتیبانی می کند.

در اولین نگاه، WebMatrix به نظر تنها از تکنولوژی های مایکروسافت، پشتیبانی می کند. اما این صحیح نیست. در WemBatrix می توانید برنامه های کاربردی PHP و MySQL بنویسید.


یک سایت PHP ایجاد نمایید

 یک وبسایت خالی با نام "Demo_PHP" ایجاد فرمایید، PHP را فعال نمایید (تصویر زیر را ملاحظه بفرمایید)، یک صفحه خالی از نوع PHP ایجاد فرمایید و آن را "index.php" نامگذاری نمایید، اکنون شما اولین سایت PHP خود را ایجاد نموده اید.

Screenshoot


یک صفحه PHP ایجاد نمایید

کدهای زیر را داخل فایل "index.php" قرار دهید:

index.php

<!DOCTYPE html>
<html>
<body>

<?php
phpinfo();
?>


</body>
</html>

 فایل را اجرا کنید و PHP را در عمل مشاهده نمایید.

پنج شنبه 28 آبان 1394  7:57 AM
تشکرات از این پست
mtk_designer
mtk_designer
کاربر برنزی
تاریخ عضویت : آذر 1390 
تعداد پست ها : 157

آموزش ASP.NET-انتشار وبسایت

برنامه کاربردی خود را بدون استفاده از WebMatrix منتشر نمایید.

WebPageها می توانند روی سرورهای راه دور با استفاده از دستورات Publish، منتشر شوند. (در WebMatrix یا ویژوال استودیو)

با این کار، تمام فایل های برنامه کاربردی شما مانند صفحات cshtml، تصاویر، کلیه فایل های dll مورد نیاز برای WebPageها، برای Razor، برای Helperها، و برای پایگاه داده SQL Server Compact (اگر پایگاه داده ای استفاده شده بود) را در سرور کپی شوند.

برخی اوقات، نیاز ندارید از این گزینه استفاده نمایید. ممکن است سروری که به شما خدمات میزبانی ارائه می دهد، فقط FTP را پشتیبانی کند. ممکن است شما در حال حاضر وب سایتی بر مبنای ASP کلاسیک داشته باشید. ممکن است بخواهید خودتان فایل ها را کپی نمایید. ممکن است بخواهید از Front Page، Expression Web، یا سایر نرم افزارهای انتشار استفاده نمایید.

آیا با مشکلی مواجه می شوید؟ بله، اما می توانید آن را حل نمایید.

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

گام های زیر را دنبال فرمایید:


1. از آخرین ورژن ASP.NET استفاده نمایید.

قبل از اینکه کارتان را ادامه دهید، از اینکه سرور میزبان شما آخرین ورژن ASP.NET را اجرا نماید اطمینان حاصل فرمایید. (4.0 یا 4.5)


2. فولدرهای وب را کپی فرمایید.

وب سایت خود (تمام فولدرها و محتوا) را از روی کامپیوتر خود، روی فولدر برنامه کاربردی در سرور میزبان وب خود کپی کنید.

پنج شنبه 28 آبان 1394  7:57 AM
تشکرات از این پست
دسترسی سریع به انجمن ها