محتویات سایت
        برچسب های محبوب 








 
   آموزش MVC - قسمت چهارم
  این مقاله در ادامه مقالات قبلی به بررسی نحوه ویرایش و حذف اطلاعات رکوردهای جدول در MVC می پردازد
   ASP.NET MVC
   ۲۴۳۴۸
   دریافت فایل ضمیمه
   امیر مددی
   ۱۳۹۰/۴/۱۸
نسخه قابل چاپ نسخه قابل چاپ

در بخش سوم نحوه ایجاد یک مدل و برقراری ارتباط با دیتا بیس را دیدید و همینطور لیستی از اطلاعات درون جدول Persons را نمایش دادیم . در این جلسه می خواهیم نحوه ویرایش و حذف اطلاعات  را ببینیم :

- ویرایش و حذف اطلاعات

همانطور که دیدید پس از ایجاد یک لیست از جدول Person  ، در View ایجاد شده کد زیر را داریم که درواقع لینکی است به اکشن هایی که باید عملیات ویرایش و حذف را باید انجام دهند :

<td>
        <%: Html.ActionLink("Edit", "Edit", new { id=item.ID }) %>
        |
        <%: Html.ActionLink("Details", "Details", new { id=item.ID })%>
        |
        <%: Html.ActionLink("Delete", "Delete", new { id=item.ID })%>
</td>

پارامتر اول در دستور Html.ActionLink ، متن ظاهر شده برای لینک به صفحه مورد نظر است ( Edit ) . پارامتر دوم نام اکشنی است که آن عملیات را انجام می دهد ( Edit ) و پارامتر سوم مقداری است که در هنگام انتقال به آن اکشن پاس داده می شود ( id=item.ID )

پس در کنترلر PersonController اکشن Edit را بصورت زیر اضافه می کنیم :

public ActionResult Edit(int? id)
{
    Person CurrentPerson = (from m in db.Persons where m.ID == id select m).FirstOrDefault();
    return View(CurrentPerson);
}

به متغیر CurrentPerson دقت کنید، از نوع Person است ، یعنی از نوع آبجکتی که در هنگام ایجاد DataContex ، ویژال استودیو در فایل designer مربوطه ایجاد می کند. اگر می خواهید آن را ببیند کافیست روی آن اشاره کنید و کلید F12 را بزنید .

 سپس View مورد نظر برای ویرایش عضو را آماده می کنیم، روی اکشن Edit کلیک راست می کنیم و :

 

دقت کنید که تمام گزینه ها مانند شکل فوق انتخاب شده باشند. با این کار کد زیر توسط ویژال استودیو تولید می شود :

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<_30Sharp_com_MVC.Person>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Edit
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <h2>
        Edit</h2>
    <% using (Html.BeginForm())
       {%>
    <%: Html.ValidationSummary(true) %>
    <fieldset>
        <legend>Fields</legend>
        <div class="editor-label">
            <%: Html.LabelFor(model => model.ID) %>
        </div>
        <div class="editor-field">
            <%: Html.TextBoxFor(model => model.ID) %>
            <%: Html.ValidationMessageFor(model => model.ID) %>
        </div>
        <div class="editor-label">
            <%: Html.LabelFor(model => model.Name) %>
        </div>
        <div class="editor-field">
            <%: Html.TextBoxFor(model => model.Name) %>
            <%: Html.ValidationMessageFor(model => model.Name) %>
        </div>
        <div class="editor-label">
            <%: Html.LabelFor(model => model.Family) %>
        </div>
        <div class="editor-field">
            <%: Html.TextBoxFor(model => model.Family) %>
            <%: Html.ValidationMessageFor(model => model.Family) %>
        </div>
        <div class="editor-label">
            <%: Html.LabelFor(model => model.Age) %>
        </div>
        <div class="editor-field">
            <%: Html.TextBoxFor(model => model.Age) %>
            <%: Html.ValidationMessageFor(model => model.Age) %>
        </div>
        <p>
            <input type="submit" value="Save" />
        </p>
    </fieldset>
    <% } %>
    <div>
        <%: Html.ActionLink("Back to List", "Index") %>
    </div>
</asp:Content>

بگذارید کمی بیشتر این فایل را بررسی کنیم :

  1.  دقت کنید که این فایل در حال حاضر فقط اطلاعات کاربر ویرایش شده را نشان می دهد و در صورت کلیک روی Save ، اطلاعات را ذخیره نمی کند ، مگر اینکه اکشن Save را نیز بنویسیم . می بینید که در MVC برای هر کاری باید اکشن جداگانه نوشت ، برای نمایش سطرهای جدول ، نمایش یک رکورد، جهت ویرایش ، ذخیره تغییرات و هر عملیات دیگری یک اکشن جداگانه نیاز است.

  2.  عبارت Html.BeginForm بیانگر ایجاد فرمی برای نمایش اطلاعات و ارسال تغییرات به اکشنی که باید تغییرات را ذخیره کند ، می باشد . این سطر را بزودی تغییر می دهیم تا نام اکشن مربوط به ذخیره اطلاعات را مشخص نماییم .

  3.  کلاس Html دارای متدهای زیادی می باشد از جمله :

    برای نمایش خطاهای ورود اطلاعاتHtml.ValidationSymmary
    جهت نمایش نام یک فیلد ( دقت کنید : نام ، نه مقدار ) با پارامتر متنیHtml.Label
    جهت نمایش نام یک فیلد ، با نگارش Lambda Html.LabelFor
    برای نمایش یک مقدار در TextBoxHtml.TextBox
    برای نمایش یک مقدار در TextBox با نگارش LambdaHtml.TextBoxFor
    نمایش خطای ورود اطلاعات برای یک فیلد (نگارش Lambda  ) Html.ValidationMessageFor

در مثال زیر تفاوت استفاده از متدهایی که فقط در یک For با هم تفاوت دارند را می بینید ، هر دو یک عمل را نشان می دهند فقط نحوه نگارش متفاوت است :

Html.TextBoxFor(model => model.Name)

در اینجا نام TextBox بصورت اتوماتیک تولید می شود


 Html.TextBox("txtName" , Model.Name )

در اینجا پارامتر اول نام TextBox است

برای مطالعه در مورد شیوه نگارش در Lambda Expression به لینک زیر مراجعه نمایید :

http://msdn.microsoft.com/en-us/library/bb397687.aspx

خب حال باید تغییراتی در Html.BeginForm بدهیم تا پس از ویرایش اطلاعات و کلیک روی دکمه Save فرم به اکشن مورد نظر ( Save ) ارسال شود :

Html.BeginForm("Save", "Person", FormMethod.Post)

این تغییر اطلاعات را به اکشن Save از کنترلر Person ارسال می کند . پس باید اکشن جدید Save  را نیز ایجاد کنیم :

public ActionResult Save(FormCollection form)
{
    int id = Int32.Parse(form["id"]);
    var EditPerson = (from m in db.Persons
                        where m.ID == id
                        select m).FirstOrDefault();

    EditPerson.Name = form["Name"];
    EditPerson.Family = form["Family"];
    EditPerson.Age = Int32.Parse(form["Age"]);
    db.SubmitChanges(); return RedirectToAction("Index", "Person");
}

خب ، در این اکشن نیز نکات جدیدی وجود دارد :

  1.  پارامتر دریافتی توسط اکشن Save  از نوع FormCollection است که در فضای نام System.Web.MVC تعریف شده است . و حاوی اطلاعات فرمی است که به آن ارسال شده است.
  2.  برای دریافت اطلاعات تغییر یافته در فرم از form استفاده می کنیم و نام فیلد مورد نظر را بدان پاس می دهیم مثل :

    form["Name"]

  3. برای ذخیره تغییرات از db.SubmitChanges استفاده کردیم . ( Linq to SQL )
  4.  بعد از ذخیره می خواهیم مجددا لیست رکوردهای جدول را نمایش دهیم تا از انجام تغییرات مطمئن شویم ، برای این کار از دستور RedirectToAction استفاده شده است که پارامتر اول نام اکشنی است که باید اجرا شود و پارامتر دوم نام کنترلر است .

حال سعی کنید اکشن Delete  را خودتان بنویسید . به چه چبزهایی نیاز دارید ؟ یک اکشن که id رکورد را دریافت کند و با استفاده از Linq to sql ، دستور حذف را در آن بنویسید.

در این جلسه با نحوه ویرایش یک رکورد از بانک اطلاعاتی آشنا شدیم . در جلسه آینده در مورد امکانات جدید MVC 3 توضیح خواهم داد .

 لطفا برای ارتقای کیفی این سری از مقالات ، نظرات خود را ارسال فرمایید.

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

برچسب های مرتبط